Re: [問題] shell script 如何清除緩衝區的資料?

看板LinuxDev作者 (小風)時間14年前 (2010/05/03 17:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《bzgibson (B'z)》之銘言: : 假如我在 abc.sh 裡快跑完時, : 再接著執行sh xyz.sh(在a.sh裡面執行sh xyz.sh這一行) : 當xyz.sh 裡面有ex: read -p "xxx" var : 正常會等我按enter,才繼續往下走 : Q:假如我在abc.sh裡面還沒跑到sh xyz.sh這一行時, : "我按下很多次enter鍵後",當執行到xyz.sh裡面, : read 會去讀取剛剛的enter,導致我沒辦法正常輸入var。 : 想請問有無清除多餘enter的方法??? 好久沒來逛這兒了, 看到好多未讀文章真不習慣...XD 目前在 shell 的環境下,似乎還沒有能夠 flush stdin 的 工具, 不過要清除多餘的 enter, 還是有辦法的, 假設你原先在 xyz.sh 裡的 read 敘述為 read -p "State your name: " var 請改為以下的方式: echo -n "Please state your name: " while test -z "$var"; do read var done 這樣一來, 他會忽略所有無效的輸入, 包括只有Enter或空白的輸入. 如果有很多需要這樣的 read 方式, 我建議你寫成函式, 下面提供 的函式, 及使用的方法, 也可以拿來直接使用.. #!/bin/sh # The replacement of read -p # Usage: read_p "prompt string" var read_p() { echo -n "$1" TMP_VAR= while test -z "$TMP_VAR"; do read TMP_VAR done eval "$2='$TMP_VAR'" } # Usage example read_p "State your name: " NAME # Output echo "Your name is $NAME" 希望能對你有所幫助.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.207.134
文章代碼(AID): #1BtfHYnz (LinuxDev)
文章代碼(AID): #1BtfHYnz (LinuxDev)