Bash

背靠背管道成命令

  • December 4, 2014

有沒有辦法將背靠背的值通過管道傳輸到命令中?例如,如果我可以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)

引用自:https://unix.stackexchange.com/questions/171150