2

パイプを使用して、コマンドの出力を別のコマンドにリダイレクトできることを知っています。

cmd1 | cmd2

また、次のようなものを使用する場合:

cmd1 | cmd2 | cmd3

2 番目のパイプはcmd3、の出力を受け取るようにしますcmd2。私の質問は:cmd3の出力を取得することは可能cmd1ですか?

4

3 に答える 3

6

使用できますtee

cmd1 | tee >(cmd2) >(cmd3)

またはpee:

cmd1 | pee "cmd2" "cmd3"

teeすべての Unix ライクなシステムにデフォルトでインストールする必要がありますが、パッケージpeeで見つけることができます。moreutils

于 2013-11-11T17:15:17.923 に答える
1

tee名前付きパイプでそれを行うことができます:

 $ fifo=/tmp/1to3
 $ mkfifo $fifo
 $ cmd1 | tee $fifo | cmd2 & cmd3 <$fifo
于 2013-11-11T17:14:52.263 に答える
0

プロセス置換 ( ) または名前付きパイプ (FIFO) の使用はオプションではありません その代わり:cmd2cmd3>(...)

  • インストールがオプションである場合 (およびプラットフォームで使用できる場合)、Radu Radeanu の回答peeで示されているようにユーティリティを使用します。

  • それ以外の場合は、次のように一時ファイルを使用します。

cmd1 | { f=$(mktemp) && cat >$f; cmd2 <$f; cmd3 <$f; rm $f; }

(OSXmktemp -t tmpでは、単にmktemp;の代わりに使用するとmktemp -t XXXX、両方のプラットフォームで動作します)。


于 2014-12-09T04:24:22.063 に答える