我有一个文件“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。 为了使这项工作有什么不同,我需要做些什么?
您将inputinput到while循环中。 在循环中, stdin来自前面的命令 ,而不是来自控制台。 您的select语句正在从read语句读取的同一个pipe道读取。
另外,你不需要cat 。
您需要保留stdin以在select语句中使用。 尝试这个:
while read el; do select yn in "yes" "no"; do echo $yn; break; done <&4; done 4<&0 < in
首先,请注意,我们使用“<”redirectinput,而不是使用cat 。
这保留你的起始标准input (fd 0)在fd 4,然后在循环内redirectinput从fd 4中select 。
select将读取一个input并重复执行直到EOF; 你几乎可以肯定想要的是表面上类似的:
cat in | while read el; do select yn in "yes" "no"; do echo $yn; break; done; done