【发布时间】:2016-08-27 19:07:25
【问题描述】:
我有一个构建脚本,在某些时候我会调用make -j4。不过,我不想每次都看到它的全部输出。除非有错误。那么如果make返回非零结果,我该如何缓冲输出并打印呢?
【问题讨论】:
-
如果有错误,会在stderr。就做
make -j4 > /dev/null -
我试图实现的是在出错时显示整个输出,而不仅仅是 stderr 上的输出。
我有一个构建脚本,在某些时候我会调用make -j4。不过,我不想每次都看到它的全部输出。除非有错误。那么如果make返回非零结果,我该如何缓冲输出并打印呢?
【问题讨论】:
make -j4 > /dev/null
将输出保存到临时文件
tmp=$(mktemp)
make -j4 &> "$tmp"
只有在出现错误时才显示
if (( $? )) ; then
cat "$tmp"
fi
rm "$tmp"
【讨论】:
output=$(make -j4 2>&1)。但它可能会变得很大。
将输出保存在变量中 - 并在出错时打印
cmdout=$(make -j4 2>&1)
es=$?
if ((es)); then
echo >&2 "make error es $es: \"$cmdout\""
else
echo "make success"
fi
【讨论】:
if ((es)); then 部分是否正确?应该是$es?
cmdout=$(make -j4 2>&1) 会从输出中删除颜色吗?