2016-11-17 50 views
0

這個腳本外殼適用於GNU/Linux的罰款,但沒有對AIX 5.3以 「set -o errexit」 在AIX上

#!/bin/sh 

echo $SHELL 

set -o nounset -o errexit 

[ 1 -eq 1 ] && { 
    echo "zzz" 
} && echo "aaa" && [ 1 -eq 0 ] && echo "bbb" 
echo "ccc" 

在GNU/Linux的意外行爲,我已經得到了預期的輸出:

/bin/bash 
zzz 
aaa 
ccc 

在AIX上,我這有一個:

/bin/ksh 
zzz 
aaa 

沒有 「設置-o nounset -o errexit」 它工作正常...我不understant原因。你能解釋我的腳本shell有什麼問題嗎?

感謝,

雷米


編輯11月18日:精密

設置-e 當這個選項是,如果一個簡單的命令用於任何的在殼錯誤的後果列出的 原因失敗或返回退出 狀態值> 0,並且不的一部分複合列表在 之後,直到或者如果是關鍵字,並且不是AND或OR列表的一部分,並且不是以!開頭的管線。保留字 然後殼應立即退出。 http://explainshell.com/explain?cmd=set+-e

在我的例子中,第二測試 「[1 -eq 0]」 是AND的一部分,所以我應該看到輸出 「CCC」。此測試返回1,它捕獲輸出「bbb」,但不應退出腳本。

雷米

+0

我想'/斌/ sh'根本沒有按」不懂'set -o errexit'。使用bash(讓第一行是'#!/ bin/bash')編輯:env'SHELL'是'/ bin/bash'不能證明任何東西,不要依賴它。 –

回答

0

在有你的Linux(可能是`ash`或`dash`)在AIX 6相同的行爲和7

雷米