EPS*_*dsf 3 shell bash control-flow
为了编译我的项目并检查它是否好,我想在 make 命令之后打印出状态消息。我应该使用哪一种?
make && echo “Success” || echo “Fail”
make || echo “Fail” && echo “Success”
make || echo “Success” && echo “Fail”
Run Code Online (Sandbox Code Playgroud)
我应该用第一个吧?
实验 - 将 'make' 替换为 'true' 和 'false'(这些命令除了返回隐含状态之外什么都不做)并尝试理解为什么你会得到你所做的结果。
编辑:这是我想到的那种实验:
for cmd in true false ; do
printf "\n%s\n" $cmd
$cmd && echo "1 Success" || echo "1 Fail"
$cmd || echo "2 Fail" && echo "2 Success"
$cmd || echo "3 Success" && echo "3 Fail"
done
Run Code Online (Sandbox Code Playgroud)
但是对于 make,您应该找出您使用的 make 版本返回的返回值 - 这是我正在运行的内容的摘录:
退出状态
如果所有 makefile 都成功解析并且没有构建失败的目标,则 GNU make 以零状态退出。
如果使用了 -q 标志并且 make 确定需要重建目标,则将返回状态 1。
如果遇到任何错误,将返回状态 2。
以及处理这些返回值的具有类似意图的脚本:
for cmd in true false ; do
# make;
$cmd
status=$?;
case "$status" in
0) echo 'all makefiles parsed, no builds failed'; ;;
1) echo 'target needs to be rebuilt'; ;;
2) echo 'error(s) in make'; ;;
*) echo "make returned unknown status: $status"; ;;
esac;
done
return $status
Run Code Online (Sandbox Code Playgroud)