解決策 1:プロセス置換の使用
これを行う最も便利な方法は、プロセス置換を使用することです。 bash では、構文は次のようになります:
foo -o >(other_command)
(これはバシズムであることに注意してください。他のシェルにも同様の解決策がありますが、結論としては移植性がありません。)
解決策 2:名前付きパイプを明示的に使用する
上記は、次のように明示的/手動で行うことができます:
<オール>
mkfifo
を使用して名前付きパイプを作成します コマンド。
mkfifo my_buf
そのファイルを入力として他のコマンドを起動します
other_command < my_buf
foo
を実行 出力を my_buf
に書き込みます
foo -o my_buf
解決策 3:/dev/stdout
を使用する
デバイスファイル /dev/stdout
を使用することもできます 以下のように
foo -o /dev/stdout | other_command
UNIX の魔法を使って、名前付きパイプを作成できます :)
<オール>パイプを作成する
$ mknod -p mypipe
パイプから読み取るプロセスを開始します
$ second-process < mypipe
パイプに書き込むプロセスを開始します
$ foo -o mypipe
stackoverflow を満足させるために、十分な長さの文を書かせてください。私の提案する解決策は、必要な 30 文字以上の長さではなく、18 文字しかないからです。
foo -o /dev/stdout
名前付きパイプは正常に機能しますが、後で削除する必要がある永続的な名前付きパイプを使用しないという追加の利点がある bash プロセス置換を介して、より適切で直接的な構文を利用できます (プロセス置換は、舞台裏で一時的な名前付きパイプを使用します):
foo -o >(other command)
また、出力をコマンドにパイプし、出力をファイルに保存する場合は、次のようにします。
foo -o >(tee output.txt) | other command