2

私は2つのコマンドをそのように1つの子にパイプすることができます(編集:実際にはこのように行うことはできません。sarnoldの回答を参照してください):

(echo "1.1 2.2 3.3") && (echo "4.4 5.5 6.6") | cat

どの出力

1.1 2.2 3.3
4.4 5.5 6.6

tarの出力と同じようなことをしたいと思います。現在、次のように単一のtarファイルに保存されているデータを分析しています。

tar -x --to-command MySerialiser -f MyData1.tar.xz | MyAnalyser

ここで、読み取りMySerialiser可能な形式でデータを前処理MyAnalyserします。

ここで、2つのtarファイルの出力をにパイプしますMyAnalyser

次のことを試しましたが、出力が端末に届きます。

(tar -x --to-command MySerialiser -f MyData1.tar.xz) && (tar -x --to-command MySerialiser -f MyData2.tar.xz)  | MyAnalyser

シェルでこれを行うことはできますか?または、tarファイルを再パッケージ化する必要がありますか?

4

2 に答える 2

4

あなたはそれを間違っています(最初のスニペットでも)。

{ tar -x --to-command MySerialiser -f MyData1.tar.xz && tar -x --to-command MySerialiser -f MyData2.tar.xz ; }  | MyAnalyser
于 2011-05-20T23:15:48.860 に答える
2

echoあなたの例はあなたがそれが示していると思うものを示しているとは思いません。に置き換え|catてみてください>/dev/null

$ (echo "1.1 2.2 3.3") && (echo "4.4 5.5 6.6") > /dev/null
1.1 2.2 3.3

最初の出力はecho(まだリダイレクトされていない)ターミナルに直接送られ、2番目の出力は(最初のコマンドechoが正常に実行されると)パイプラインを通過します。echo

この種の構造があなたの望むものにつながるとは思わないので、2つのコマンドからの出力を一度に1つのプログラムに処理する際のあなたの目標は何ですか?tar

于 2011-05-20T23:17:36.290 に答える