在一段时间内使用select阅读不给我我想要的结果

我有一个文件“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