1つのコマンドの出力を他の2つのコマンドにパイプできますか?


回答:


56

ように聞こえるteeコマンドは、あなたがやりたいだろう。

キーは使用することです

>( )

以下のためのプロセス置換。ではtee、次のパターンを使用します。

tee >(proc1) >(proc2) >(proc3) | proc4

したがって、ls2つの異なるgrepプログラムへの入力としての出力を使用する場合は、それぞれの出力grepを異なるファイルに保存し、すべての結果をlessでパイプ処理します:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

の結果はls -A両方に「パイプ」されgrepます。ファイルは、hidden-files最初の出力からコンテンツを有するであろうgrep、そしてnormal-files第二の結果を有するであろうgrepすべてのファイルがページャーに表示されますless 編集:に表示されるのlessは、sの結果ではなく、とまったく同じ出力です。からへの出力を変更したい場合(例えば、通常のファイルが隠しファイルの前にリストされるように順序を入れ替える)、これを試してください:ls -Agrepls -Aless

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

を指定しない>/dev/nullと、grepsの出力ls -Aが置き換えられる代わりに、出力に追加されます。

ソース


3
これはとても良いです!
hayalci 09

3
+1シェルスクリプトの10年後でも、私はこれを見たことがないので!
jtimberman 2009

6

「tee」を使用します。

例:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

これにより、grepコマンドの出力が端末とwcの両方に送信されます(その出力はファイルgrepresultにリダイレクトされます)。

「Tee」については、Wikipediaの記事tee(command)で説明されています。中心は、「teeコマンドは標準入力を読み取り、その内容を標準出力に書き込み、同時に指定されたファイルまたは変数にコピーします。」です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.