サブシェルと入力/出力リダイレクトの問題

サブシェルと入力/出力リダイレクトの問題

シェルI / Oの動作についていくつかの質問があります。

echo apple | echo banana

ここでの出力は次のとおりです。

banana

しかし、このコマンドでは:

echo apple | { echo banana; tail; }

出力は次のとおりです

banana
apple

バナナがリンゴの前に出てきたのはなぜですか? Appleが最初のコマンドのように見えないのはなぜですか?

echo apple | { echo banana; rev; }

上記のコマンドの出力は次のようになります。

banana
elppa

リンゴはなぜ反転され、バナナは反転されないのですか?echo banana; rev;同時に実行されるからでしょうか?

echo apple >&2 | { echo banana; rev; }

上記のコマンドの出力:

banana
apple

これは前のコマンドと比較して理解できます。なぜなら、私たちはAppleにエラー出力に移動し、rev標準出力のみを許可するように指示しているからです。

echo apple >&2 | { echo banana; rev; } | tac

出力:

apple
banana

なぜ行の順序を変更したいのか分かりませんtac。エラー出力も考慮されますか?

{ echo apple >&2; echo banana; } | rev | tac

出力:

apple
ananab

ここでリンゴはエラー出力なので理解していないようですが、revバナナは理解していますが、なぜtacこれが起こるのでしょうか?

関連情報