パイプSTDOUTとSTDERRを介してそれぞれ

パイプSTDOUTとSTDERRを介してそれぞれ

test1次のstdout出力を生成する関数がありますstderr

test1() {
    echo "out 1"
    sleep 0.1

    echo "error 1" 1>&2
    sleep 0.1

    echo "out 2"
    sleep 0.1

    echo "error 2" 1>&2
    sleep 0.1
}

それから2つのエイリアスがあります滞在 stdin次のアドレスに送信してくださいstdout

alias o='sed -E "s/^/O /"'
alias e='sed -E "s/^/E /"'

2つのストリームをtest1パイプにパイプし、フォーマットされた出力で終わる方法は?私はAlpine LinuxでBashを使用しているので、GNUユーティリティはオプションではありません。oestdoutstderr

私の推論は次のとおりですが、構文的に実行する方法がわかりません。

  1. errout送信しますout3
  2. 実行ine送信err3受信out
  3. 走って急いinでくださいo
  4. 利益?

答え1

bashを使用してこれを行うことができます。プロセスの置き換え:

stdoutパイプで選択されないようにするには、stderrにリダイレクトする必要があります。

$ perl -E '{*STDOUT} 「こんにちは」と言ってください。 {*STDERR}「こんにちは」と言ってください。 \
        >>(sed s/^/out:/) \
       2>>(sed s/^/エラー:/>&2)

関連情報