管道std和err输出如何在bash脚本中单独命令?

时间:2015-01-10 12:44:03

标签: bash shell

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

我不想将输出存储到变量中,甚至更糟糕的是存储到文件中,因为我必须等到命令完成执行才能看到输出。

1 个答案:

答案 0 :(得分:1)

您可以使用:

# 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 $0}'; } 3>&1 1>&2 |
  awk -v p="$errprefix" '{print p $0}'
stderr: error
stdout: output

只需用长时间运行的命令替换cmd