複数のコマンドの出力を別のコマンドの入力にリダイレクトする正しい方法は何ですか?
例えば
$ command < (command2 | grep pattern)
答え1
(疑わしい場合はbashを示します。)
パイプを作成(または既存の拡張)して、あるコマンドまたはパイプの出力を別のコマンドへの入力として使用できます。
command1 | command2
command1 | command2 | command3
複数のコマンド(パイプを含む)をサブシェルまたはリスト(グループコマンド)と組み合わせることができます。この組み合わせはパイプラインの最初の部分になります。
(command1; command2 | command3; command4) | command5
{command1; command2 | command3; command4;} | command5 # note the ; before }
もう一つの可能性は、「ここで文字列」(または「ここで文書」)です。
command2 <<< $(command1)
command2 <<EOT
First input line
$(command1)
Last input line
EOT
その他のケース
コマンドの置き換え出力がコマンドラインの一部である必要がある場合に使用します。つまり、あるコマンドが別のコマンドの出力を独自の引数として扱う必要がある場合:
echo $(date)
echoはechoの出力をdate
コマンドラインに入力したかのように引数として扱います。
プロセスの置き換え他のプロセスの出力は、コマンドラインに引数として提供された(検索できない)ファイルの内容として表示されます。
grep bar <(echo $'foo\nbar\nbaz')
そうです。
echo $'foo\nbar\nbaz' > /path/to/file
grep bar /path/to/file
答え2
以下を使用してコマンドを実行する必要があります。コマンドの置き換え通事論。
$ command < $(command2 | grep pattern)