我有一个文件“in”,其中包含:
a
b
c
我运行以下命令:
cat in | while read el; do select yn in "yes" "no"; do echo $yn; done; done;
并得到以下输出:
1) yes
2) no
#?
#?
#?
我希望能够在每次迭代时输入 1 或 2。我需要做哪些不同的事情才能实现这一点?
答案1
您正在将输入导入 while 循环。在循环中,stdin 来自前面的命令,而不是从控制台。您的语句从该语句正在读取的select
同一管道中读取。read
另外,您不需要cat
。
你需要保留标准输入用于 select 语句。试试这个:
while read el; do select yn in "yes" "no"; do echo $yn; break;
done <&4; done 4<&0 < in
首先,请注意我们使用“<”而不是使用来重定向输入cat
。
这可以保留你的原产地标准输入(fd 0)在 fd 4 中,然后在循环内部将输入重定向到select
fd 4。
答案2
select
将读取输入并重复执行直到 EOF;你几乎肯定想要的是表面上类似的:
cat in | while read el; do select yn in "yes" "no"; do echo $yn; break; done; done