作者phterry (小风)
看板LinuxDev
标题Re: [问题] shell script 如何清除缓冲区的资料?
时间Mon May 3 17:16:15 2010
※ 引述《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