Re: [問題] shell script 如何清除緩衝區的資料?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):