使用 && 和 || 时无法停止 BASH运营商
Cannot stop BASH when using of && and || operators
如果命令有任何错误,我想停止我的 BASH。
make clean || ( echo "ERROR!!" && echo "ERROR!!" >> log_file && exit 1 )
但我的 BASH 似乎还在继续。如何将 exit 1
放在单行运算符
中
我是 BASH 的新手,非常感谢您的帮助!
exit 1
从 ()
创建的子 shell 退出,而不是原来的 shell。使用 {}
将命令组保持在相同的 shell.
不要在命令之间使用 &&
除非你想在其中一个失败时立即停止。使用 ;
分隔同一行的命令。
make clean || { echo "ERROR!!" ; echo "ERROR!!" >> log_file ; exit 1 ;}
或者直接使用if
更容易理解。
if ! make clean
then
echo "ERROR!!"
echo "ERROR!!" >> log_file
exit
fi
您在 中有直接的解决方案。如果您想以类似的方式检查多个命令,另一种方法是定义一个可以重复使用的函数:
die() {
echo "ERROR: $@"
echo "ERROR: $@" >> log_file
exit 1
}
make clean || die "I left it unclean"
make something || die "something went wrong"
或者,如果您希望脚本在出现问题的第一个迹象时结束,您可以使用 set -e
set -e
make clean # stops here unless successful
make something # or here if this line fails etc.
您可能还想记录一条错误消息,因此您可以在 ERR
上安装 trap
。 errfunc
将在退出脚本之前调用,并记录失败的行号:
errfunc() {
echo "ERROR on line "
echo "ERROR on line " >> log_file
}
trap 'errfunc $LINENO' ERR
set -e
make clean
make something
如果命令有任何错误,我想停止我的 BASH。
make clean || ( echo "ERROR!!" && echo "ERROR!!" >> log_file && exit 1 )
但我的 BASH 似乎还在继续。如何将 exit 1
放在单行运算符
我是 BASH 的新手,非常感谢您的帮助!
exit 1
从 ()
创建的子 shell 退出,而不是原来的 shell。使用 {}
将命令组保持在相同的 shell.
不要在命令之间使用 &&
除非你想在其中一个失败时立即停止。使用 ;
分隔同一行的命令。
make clean || { echo "ERROR!!" ; echo "ERROR!!" >> log_file ; exit 1 ;}
或者直接使用if
更容易理解。
if ! make clean
then
echo "ERROR!!"
echo "ERROR!!" >> log_file
exit
fi
您在
die() {
echo "ERROR: $@"
echo "ERROR: $@" >> log_file
exit 1
}
make clean || die "I left it unclean"
make something || die "something went wrong"
或者,如果您希望脚本在出现问题的第一个迹象时结束,您可以使用 set -e
set -e
make clean # stops here unless successful
make something # or here if this line fails etc.
您可能还想记录一条错误消息,因此您可以在 ERR
上安装 trap
。 errfunc
将在退出脚本之前调用,并记录失败的行号:
errfunc() {
echo "ERROR on line "
echo "ERROR on line " >> log_file
}
trap 'errfunc $LINENO' ERR
set -e
make clean
make something