2016-11-17 49 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

雷米