我只希望将第一个答案传递给函数
echo "y" | install
并让用户选择回答下一个问题,但是当我这样做时,我会得到一个无限循环。
答案 0 :(得分:6)
使用管道时,shell会更改,以便接收程序标准输入是管道,而不是其他任何内容。您不能将来自管道的输入与来自shell的非管道输入混合,这根本不可能。使用管道(或重定向)时,它是全部或全部。
关于install
程序,您认为“无限循环”可能是它试图从标准输入(管道)读取,但是因为没有什么可以从管道读取它只会等待更多的输入到达,这不会发生。
答案 1 :(得分:2)
Joachim Pileborg的答案是完全正确的,但是对于某些用法,您可以使用{ echo y; cat } | install
之类的内容发送前导y
然后接受用户输入,但仅限于此在某些环境/用途中工作(例如,它不会逐个字符地报告给程序)。
如果你确实需要这样的东西,那么你可以考虑使用expect程序,因为它是为此而设计的(除其他外)。