ここには「入力」へのいくつかの異なる参照がありますので、最初にそれを理解することを念頭に置いていくつかのシナリオを示します。 最短形式の質問に対する迅速な回答:
stat testfile < <($1)> outputfile
上記は、テストファイルの統計を実行し、STDOUTを取得(リダイレクト)し、それを次の特別な関数(<()部分)に含めて、それが何であれ最終結果を新しいファイル(outputfile)に出力します。ファイルが呼び出され、bashビルトインで参照されます(その後、毎回$ 1、新しい一連の指示を開始するまで)。
あなたの質問は素晴らしく、これを行うにはいくつかの答えと方法がありますが、実際にあなたが具体的にやっていることによって実際に変わります。
たとえば、それもループできます。これは非常に便利です。これの一般的な使用法は、擬似コードの考え方では、次のとおりです。
run program < <($output_from_program)> my_own.log
それを取り入れてその知識を拡張すると、次のようなものを作成できます。
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
これは、現在のディレクトリで単純なls -Aを実行し、次にls -Aからの各結果をループし、それらの結果のそれぞれでgrep "thatword"を実行し、前の結果のみを実行します。実際に「その単語」を含むファイルを見つけた場合は、printf(赤)。また、grepの結果を新しいテキストファイルfiles_that_matched_thatwordに記録します。
出力例:
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
index.html
これらはすべてls -Aの結果を出力するだけで、特別なことは何もありません。今回はgrepに何かを追加します。
echo "thatword" >> newfile
次に、再実行します。
ls -A; (while read line; do printf "\e[1;31mFound a file\e[0m: $line\n"; done) < <(/bin/grep thatword * | /usr/bin/tee -a files_that_matched_thatword)
files_that_matched_thatword index.html newfile
Found a file: newfile:thatword
おそらくあなたが現在探しているよりも疲れる答えですが、このような便利なメモを保管しておくことは、将来の努力においてより多くの利益になると信じています。
<
(ファイルから左側への|
入力)または(ストリームから右側への入力)経由でパイプできます。違いがあります。