如何保持记录并在线检查?

时间:2014-03-02 07:12:07

标签: shell makefile

我想重定向make的日志,看看make上做了什么。这是脚本

make |& tee make.log         # bash syntax
# make 2>&1 | tee make.log   # or, sh syntax
[ $? -ne 0 ] && echo "Error: stopped" && exit 1
echo "Done"

我发现make失败时不会执行Error退出。 我想这是由管道引起的,但是如何优化构建脚本呢?

1 个答案:

答案 0 :(得分:0)

由于你已经限制自己使用bash,而不是便携式POSIX sh,你可以使用bash的pipefail shell选项;运行set -o pipefail。 bash的手册页说:

  

如果启用了pipefail,则管道的返回状态是以非零状态退出的最后一个(最右边)命令的值,如果所有命令都成功退出,则返回零。

例如

#!/bin/bash
set -o pipefail
if make |& tee make.log ; then
  echo "Done"
else
  echo "Error: stopped"
  exit 1
fi