Bash
背靠背管道成命令
有沒有辦法將背靠背的值通過管道傳輸到命令中?例如,如果我可以
command.pl
並且想要輸入response
,然後y
確認(因為它沒有自動確認的方法)?我試過
echo "y" | echo "response" | ./command.pl
了,但它不起作用,因為管道的順序是從左到右的。本質上,我需要先執行一個管道,然後再執行下一個命令。括號或引號或其他東西有什麼技巧嗎?
您是否嘗試過將您的兩個答案組合成一個
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
.
最簡單的解決方案是結合兩個 echo 命令。
echo $'y\nresponse' | ./command.pl
$
用單引號和前面寫一個字元串告訴 bash 解釋轉義序列,如\n
.如果您使用管道的命令更複雜,您可以用花括號將它們分組。
{ echo y; echo response; } | ./command.pl
括號也可以工作,儘管它們會創建一個不必要的額外子外殼(輕微的低效率)。
(echo y; echo response) | ./command.pl
另一種選擇是程序替換。
./command.pl < <(echo y; echo response)