連続パイプライン入力コマンド

連続パイプライン入力コマンド

コマンドに常に値を渡す方法はありますか?たとえば、command.pl入力したresponse後にy確認(自動で確認する方法がないため)でき、必要に応じてどうすればよいですか?

これを試してみましたが、echo "y" | echo "response" | ./command.plパイプの順序が左から右であるため、動作しません。デフォルトでは、次のコマンドを実行する前にパイプラインを実行する必要があります。かっこや引用符などのトリックはありますか?

答え1

最も簡単な解決策は、2つのechoコマンドを組み合わせることです。

echo $'y\nresponse' | ./command.pl

$単一引用符と前にaを使用して文字列を作成すると、bashになどのエスケープシーケンスを解釈するように指示します\n

渡すコマンドがより複雑な場合は、中かっこでグループ化できます。

{ echo y; echo response; } | ./command.pl

括弧も機能しますが、不要な追加のサブシェルを作成します(やや効率が悪い)。

(echo y; echo response) | ./command.pl

別のオプションはプロセスの交換です。

./command.pl < <(echo y; echo response)

答え2

echo二つの答えを改行文字で区切って一つにグループ化してみましたか?

echo -e "response\ny" | ./command.pl

バックスラッシュエスケープ解析を有効にするには、この-eフラグがbash必要です(bashUnix準拠モードでない場合)。

または、より携帯性に優れています。

echo 'response
y' | ./command.pl

または:

printf 'response\ny\n' | ./command.pl

または:

printf '%s\n' response y | ./command.pl

編集する:

言及するのを忘れましたが、初期コマンドの問題は、echoSTDINを介した入力を許可しないことです。このコマンドの出力はecho "y"決して到達しません./command.pl

答え3

また、使用することができますここのドキュメント:

./command.pl <<END
response
y
END

答え4

コマンドをファイルに入れてから、ファイルをコマンドに入れたところ、正常に動作しました。

cat blah.txt | ./command

戻ったときにuser43791の答えを見たので、これを答えとして受け入れます。私がやったのと同じですが、より簡潔に見えます。

関連情報