入力をフィルタリングまたは処理し、それを出力として渡すコマンドがいくつかあります。通常、 stdoutと思います。 –ただし、一部のコマンドは stdinを使用します そして、彼らがそれを使って何をしても、何も出力しません。
私はOSXに最も精通しているので、すぐに頭に浮かぶのは pbcopyの2つです。 およびpbpaste –これはシステムクリップボードにアクセスする手段です。
とにかく、stdoutを取得して出力を吐き出し、両方の stdout に移動する場合は、 ファイルを使用すると、 teeを使用できます 指図。そして、私は xargsについて少し知っています 、しかしそれは私が探しているものではないと思います。
stdoutを分割する方法を知りたい 2つ(またはそれ以上)のコマンド間を移動します。例:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
おそらくそれよりも良い例がありますが、 stdout を維持しながら、それを中継しないコマンドにstdoutを送信する方法を知りたいと思っています。 「ミュート」から– catの方法については質問していません ファイルとgrep その一部をクリップボードにコピーします–特定のコマンドはそれほど重要ではありません。
また–これをファイルと stdoutに送信する方法を尋ねていません –これは「重複した」質問かもしれません(申し訳ありません)が、私はいくつか調べてみたところ、stdoutとファイルを分割する方法について質問している同様の質問しか見つかりませんでした–そしてそれらの質問に対する答えはtee<のようでした/ code> 、これは私にはうまくいかないと思います。
最後に、「なぜpbcopyをパイプチェーンの最後のものにしないのですか?」と尋ねることができます。私の応答は1)それを使用してコンソールに出力を表示したい場合はどうなりますか? 2) stdoutを出力しない2つのコマンドを使用したい場合はどうなりますか 入力を処理した後?
ああ、もう1つ、 teeを使用できることに気づきました。 名前付きパイプ( mkfifo )しかし、事前の設定なしで、これをインラインで簡潔に実行できる方法を望んでいました🙂
承認された回答:
teeを使用できます これのプロセス置換:
cat file.txt | tee >(pbcopy) | grep errors
これにより、 cat file.txtのすべての出力が送信されます pbcopyへ 、 grepの結果のみが表示されます コンソールで。
teeに複数のプロセスを配置できます パート:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors