Bourne Shell:获得退出状态的优雅方式

时间:2010-04-16 16:31:11

标签: bash unix scripting sh exitstatus

有更优雅的方法(bourne shell)吗?

IsThereAnyApplesLeft
applesLeft=$?

通常在c或java中我会这样做:

applesLeft=IsThereAnyApplesLeft

4 个答案:

答案 0 :(得分:6)

退出状态通常隐式使用,如下所示:

if IsThereAnyApplesLeft;then
   echo "Apples left"
fi

答案 1 :(得分:3)

尝试:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?

是的,你要使用$?,没有办法避免它。

答案 2 :(得分:0)

这两段代码无法直接比较。你的bash示例是创建一个子进程来运行一个名为“IsThereAnyApplesLeft”的可执行文件,等待该子进程完成并将子进程的退出代码存储在变量$中?这样你就可以检查它并采取相应的行动。

这实际上是一个非常复杂的交互,并且在C中执行相同的操作需要大量的代码。你必须fork()一个子进程,在子的pid上有父wait4pid(),同时在子文件中调用execl()对文件“IsThereAnyApplesLeft”进行运行。使用shell脚本语言的一个好处是它隐藏了你的这类东西。

相比之下,您的C代码片段只是调用C函数并将结果存储在局部变量中。在bash中看起来像这样:

IsThereAnyApplesLeft()
{
        echo 498
}

applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."

答案 3 :(得分:-1)

$?的优点是什么?

根据the Advanced Bash Scripting Guide,除了$?之外,没有其他方法可以获得退出代码 - 除了$?之外,他们没有列出任何其他方式来获取它。如果有另一种方式,它肯定会列在上面链接的退出代码部分。

相关问题