2011-11-07 56 views
2

我正在寫一些殼牌代碼和,對於一些編程邏輯,我需要做一些返回數字。這就是:UNIX:可以繞過unix的退出代碼嗎?

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

是否有辦法繞過這個? (我知道我可以使用另一個返回號碼)

謝謝。

+0

我curoius什麼會使你反正需要負退出代碼... – hugomg

+1

公司的標準。他們使用**負面代碼**的錯誤和**積極的成功**。他們希望它**在Shell中以這種方式**:/ – Kani

+1

不能只是設置「err」參數並在代碼返回時查找它。如果設置了「err」,則將返回值視爲返回的負值。 –

回答

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,$()被稱爲命令替換。除非您在Sun/AIX或其他傳統供應商平臺上使用原始承載外殼編碼,否則您將看到人們還實施帶有配對後退標記'cmd'的命令sub,但使用$(cmd),或者您需要創建完全向後的代碼注重向後!)兼容。

$()是不錯的,因爲你可以嵌套他們儘可能多,因爲你需要,即

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

根據新Kornshell編程語言(ISBN-10:0131827006,1995年)反引號已被棄用。

請注意,任何一種類型的命令替換都會創建一個子shell來運行該命令,然後將結果替換爲您的命令行。

我希望這有助於;-)

+0

謝謝。我認爲這是一個優雅的解決方案。我會在引擎蓋下實施它 – Kani

+0

很高興它有幫助。幾分鐘後即可看到主要的新編輯。 – shellter

+0

@kani該解決方案(+1,btw)不符合貴公司的政策。這個函數的輸出可能是一個字符串,當用strtol解析時它的值是一個負整數,但myfunc的返回值總是正值1(即使失敗!) –