如何将 std 和 err 输出通过管道传输到 bash 脚本中的单独命令?

How pipe std and err output to separate commands in bash script?

我有一个 bash 脚本执行长 运行 命令。我想在命令打印到 stdout 的每一行前面加上 $stdprefix,在打印到 stderr 的每一行前面加上 $errprefix。

我不想将输出存储到变量中,更不想存储到文件中,因为我必须等到命令执行完毕才能看到输出。

您可以使用:

# your prefixes
stdprefix="stdout: "
errprefix="stderr: "

# sample command to produce output and error
cmd() { echo 'output'; echo >&2 'error'; }

现在独立重定向 stdout 和 stderr:

{ cmd 2>&3 | awk -v p="$stdprefix" '{print p [=11=]}'; } 3>&1 1>&2 |
  awk -v p="$errprefix" '{print p [=11=]}'
stderr: error
stdout: output

只需将 cmd 替换为您的长 运行 命令即可。