在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
:在控制台中打印错误和“无目标”,但在日志文件中只写“无目标”,而不是错误本身。答案 0 :(得分:1)
如果您使用bash,则可以查看PIPE_STATUS[0]
以获取make
中make 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
但要重申:“没有目标”是一个无用的错误消息,可能不准确。