私はこれを持っています:
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
私はこれがあなたが望むものだと思います。