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ユーティリティはオプションではありません。o
e
stdout
stderr
私の推論は次のとおりですが、構文的に実行する方法がわかりません。
err
にout
送信しますout
。3
- 実行
in
、e
送信err
、3
受信out
。 - 走って急い
in
でくださいo
。 - 利益?
答え1
bashを使用してこれを行うことができます。プロセスの置き換え:
stdoutパイプで選択されないようにするには、stderrにリダイレクトする必要があります。
$ perl -E '{*STDOUT} 「こんにちは」と言ってください。 {*STDERR}「こんにちは」と言ってください。 \ >>(sed s/^/out:/) \ 2>>(sed s/^/エラー:/>&2)