如何在子shell命令失败时终止shell?

时间:2013-12-12 14:54:00

标签: linux bash shell

如何在子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。

2 个答案:

答案 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 # ;-)