プロセス置換を使用し、stderrだけをプロセスに送信します。

プロセス置換を使用し、stderrだけをプロセスに送信します。

私はこれを持っています:

exec > >( while read line; do echo " stdout: $line"; done )
exec 2> >( while read line; do echo " stderr: $line"; done )

echo "rolo"
>&2 echo "cholo"

スクリプトを実行すると、次の出力が生成されます。

stdout: ロロー
stdout: stderr: チョロ

ラインを交換するために、どのようにstderrを2番目のプロセスに送ることができますか?私は理解できません。

なぜこれが起こるのかわかりません。

標準出力: rolo
標準出力: stderr: cholo # 何ww

答え1

無効な順序でリダイレクトを設定しました。 2番目のプロセスの標準出力stderr:は後で実行されるため、最初のプロセスの標準出力を置き換えます(接頭辞付き)。

この試み:

exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )

echo "rolo"
echo "cholo" >&2

この出力

 stderr: cholo
 stdout: rolo

私はこれがあなたが望むものだと思います。

関連情報