Shell 如何保存日志并在线查看?
我想重定向make的日志,看看make在做什么。这是剧本Shell 如何保存日志并在线查看?,shell,makefile,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失败时,它不会执行错误退出。 我猜这是由管道引起的,但是如何优化构建脚本呢
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失败时,它不会执行错误退出。
我猜这是由管道引起的,但是如何优化构建脚本呢?既然您已经限制自己使用bash,而不是portable POSIX sh,那么您可以使用bash的pipefail shell选项;运行
设置-o pipefail
。bash的手册页上说:
如果启用了pipefail,则管道的返回状态为最后一个(最右边)要退出的命令的值,状态为非零,如果所有命令都成功退出,则返回状态为零
例如
谢谢,您也知道如何在sh中执行吗?在POSIX sh中没有直接的方法。您可以通过文件重定向输出,而不是使用效率低得多但允许您测试每个出口代码的管道。或者您可以将退出代码写入文件:
(firstcmd;echo$?>exitstatus)| secondcmd
,然后读取该文件。或者你可以用FD复制和重定向做一些超级花哨的事情;例如,见。
#!/bin/bash
set -o pipefail
if make |& tee make.log ; then
echo "Done"
else
echo "Error: stopped"
exit 1
fi