我有以下脚本代码:
测试文件
echo "BEGIN"
while read CMD <&1; do
[ -z "$CMD" ] && continue
case "$CMD" in
start)
echo "get_start"
;;
stop)
echo "get_stop"
;;
*)
echo "get_uknown_command"
;;
esac
echo "END";
done
当我运行它时:
$./test.sh <input.txt
我的脚本被锁定
输入.txt
start
stop
sthh
为什么我的脚本被锁定?我该如何解决这个问题?
顺便说一句:如果我手动输入数据,则脚本将不会锁定。
答案1
你的第二行是不正确的,并且无论如何都过于复杂。这文件描述符对于stdin
、stdout
、 和分别stderr
是0
、1
、 和2
,因此要读取stdin
您想要的
while read CMD <&0; do
但是,由于stdin
是 的默认输入read
,
while read CMD; do
这确实是最简单的方法。这样,您可以手动输入命令,或在命令行上使用重定向来读取文件。