UNIX:可以绕过unix的退出代码吗?

时间:2011-11-07 15:59:26

标签: shell unix

我正在编写一些 Shell 代码,对于某些编程逻辑,我需要使用负数数字执行返回。这是:

if condition ; then
   return -1
else 
   return -2
fi

尽管如此,我在使用负数时会出错,可能是因为:Unix exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.(来自http://en.wikipedia.org/wiki/Exit_status#Unix

有没有办法绕过这个? (我知道我可以使用另一个返回号码)

谢谢。

1 个答案:

答案 0 :(得分:5)

很抱歉,但是针对shell脚本的Unix标准是成功退出0并且因非成功而退出非零。

您可以做的最好的事情是捕获返回值并根据需要使用它们,即

myfunc () {  
    printf -- "$1" "\n"
    if (( ${1:-0} == 0 )) ; then
       return 0
    else
       return 1
    fi   
}

var=$(myfunc -2)
print var=${var}

#output
var=-2

不是你的领主想要听到的内容,而是将他们引荐到Posix Standards

同样FYI,$()称为命令替换。您将看到人们还实现了命令子,其中配对的后退标记为“cmd”,但使用$( cmd ),除非您在Sun / AIX或其他传统供应商平台上使用原始的shell外壳编码或者您需要创建完全向后的代码(强调向后!)兼容。

$()很好,因为你可以根据需要嵌套它们,即

 $( cmd1 $( cmd2 $( cmd..n ) ) )

根据New Kornshell编程语言(ISBN-10:0131827006,1995!),不推荐使用反引号。

请注意,任何类型的命令替换都会创建一个子shell来运行命令,然后将结果“替换”到命令行中。

我希望这会有所帮助; - )