处理错误并在shell中重定向输出

时间:2016-08-18 13:13:09

标签: sh

在shell脚本中,我运行一个可能失败的命令。例如,这里我在新目录(mkdir foo && cd foo)中工作,因此make命令无法成功。

我使用||处理错误:

make || echo "No target"

...我在tee的日志文件中打印输出(stdout和stderr):

make 2>&1 | tee foo.log

如何一次完成这两项?

  • make 2>&1 | tee foo.log || echo "No target":在日志文件中写入错误,但不要在控制台中打印“No target”;
  • make || echo "No target" 2>&1 | tee foo.log:在控制台中打印错误和“无目标”,但在日志文件中只写“无目标”,而不是错误本身。

1 个答案:

答案 0 :(得分:1)

如果您使用bash,则可以查看PIPE_STATUS[0]以获取makemake 2>&1 | tee的状态。如果您想要便携性,可以执行以下操作:

{ make 2>&1 || echo 'No target' > /dev/tty; } 2>&1 | tee foo.log

但是“没有目标”可能是错误的错误信息,这只会让遇到它的人感到困惑。

如果您确实希望“无目标”也在foo.log,请使用:

{ make 2>&1 || echo 'No target'; } | tee foo.log

但要重申:“没有目标”是一个无用的错误消息,可能不准确。