我想重定向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退出。 我想这是由管道引起的,但是如何优化构建脚本呢?
答案 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