使用文件输入作为 shell 脚本的标准输入不起作用

使用文件输入作为 shell 脚本的标准输入不起作用

我有以下脚本代码:

测试文件

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

你的第二行是不正确的,并且无论如何都过于复杂。这文件描述符对于stdinstdout、 和分别stderr01、 和2,因此要读取stdin您想要的

while read CMD <&0; do 

但是,由于stdin是 的默认输入read

while read CMD; do

这确实是最简单的方法。这样,您可以手动输入命令,或在命令行上使用重定向来读取文件。

相关内容