分别通过管道 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
}

然后我有两个别名格式 stdin并将其发送至stdout

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

如何test1通过o和传输两个流e并最终在stdout和上得到格式化输出stderr?我在 Alpine Linux 上使用 Bash,因此不能选择 GNU 实用程序。

我的推理如下,但我不知道如何在语法上执行它:

  1. 发送erroutout3
  2. 运行ine发送至err3out
  3. 跑过,匆匆in处理o
  4. 利润?

答案1

您可以使用 bash 来完成此操作过程替代

请注意,您必须将其重定向回 stderr,以避免它被 stdout 管道拾取:

$ perl -E '说 {*STDOUT} “嗨”;说 {*STDERR} “再见”' \
        >>(sed s/^/out:/) \
       2>>(sed s/^/错误:/>&2

相关内容