如何在子shell命令失败时终止shell。
例如:
check(){
if [ $1 -eq $1 2> /dev/null ]; then
echo "returning 0"
return 0
else
echo "returning 1"
return 1
fi
}
if [ "($check $1)" == 1 ]; then
echo "Error: with proper message"
exit
fi
if [ "$1" -le 1000 ] || [ "$2" -ge 10000 ]; then
echo "Error:"
exit
fi
这里我传递一个字符串,如果条件失败则首先传递一个字符串;如果条件执行时,第二个传递一个字符串"整数表达式预期"。 我知道()子shell命令失败但shell没有终止。当子shell命令失败时如何退出shell。
答案 0 :(得分:1)
您想测试该功能的退出状态。以下内容:
if [ "($check $1)" == 1 ]; then
可能会导致错误。即使你说:
if [ "$(check $1)" == 1 ]; then
不会比较退出状态,即函数的返回值。它会将函数的输出与1
进行比较。
您需要通过以下方式调用您的函数:
check $1
然后通过说:
检查退出状态if [ $? -ne 0 ]; then
echo "Error: with proper message"
exit
fi
(据我所知,这里没有涉及任何子shell。)
答案 1 :(得分:0)
function try() {
echo "$@"
if ! "$@"
then
t="$_"
echo "Failed, error $t"
exit $t
fi
return $_
}
try mkdir /dev/sda # ;-)