有没有办法将值连续传输到命令中?例如,如果我可以command.pl
并且想要输入response
,然后y
确认(因为它没有自动确认的方法)?
我已经尝试过,echo "y" | echo "response" | ./command.pl
但它不起作用,因为管道的顺序是从左到右。本质上,我需要先运行一个管道,然后再运行下一个命令。有括号或引号或其他东西的技巧吗?
答案1
最简单的解决方案是结合两个 echo 命令。
echo $'y\nresponse' | ./command.pl
写一个带有单引号和$
前面的 a 的字符串告诉 bash 解释转义序列,如\n
.
如果您要传递的命令更复杂,您可以用花括号将它们分组。
{ echo y; echo response; } | ./command.pl
括号也可以工作,尽管它们会创建不必要的额外子 shell(效率稍低)。
(echo y; echo response) | ./command.pl
另一种选择是流程替换。
./command.pl < <(echo y; echo response)
答案2
您是否尝试过将两个答案分组为一个,echo
并用换行符分隔?
echo -e "response\ny" | ./command.pl
请注意,该-e
标志是bash
启用反斜杠转义解释所必需的(除非bash
处于 Unix 一致性模式)。
或者更便携:
echo 'response
y' | ./command.pl
或者:
printf 'response\ny\n' | ./command.pl
或者:
printf '%s\n' response y | ./command.pl
编辑:
我忘了提及,但您的初始命令的问题是它echo
不通过其 STDIN 接受任何输入。该命令的输出echo "y"
从未达到./command.pl
。
答案3
您还可以使用这里的文档:
./command.pl <<END
response
y
END
答案4
我将命令放入一个文件中,然后将文件放入命令中,这样就成功了。
cat blah.txt | ./command
当我回来时,我注意到 user43791 的回复,因此将接受它作为答案,它看起来与我所做的相同,但更简洁。