在aix,任何解决方案上运行时,多个GNU-Bash命令的行为都不同

时间:2013-06-17 12:44:44

标签: linux bash gnu aix

我在linux上编写了一个bash脚本,它运行良好,作为迁移的一部分,我将aix 7.2节点移动到了我的集群中。当我尝试在aix上运行bash脚本时,它失败了,在不同的gnu bash命令上出现了多个错误。 [ps:我在这个aix节点上安装了gnu bash,IBM称之为为aix制作的工具箱,其中包含为AIX IBM Systems构建的开源和GNU软件的集合]

例如:

- grep -oP 不受支持

- ls -h 不起作用

- getopts无法获取参数,$#也是如此。

我不确定我是否只是在aix上安装gnu bash。有没有人有任何将bash脚本移植到ssh的经验? 是否有任何指针社区可以建议让bash脚本在aix上运行?

2 个答案:

答案 0 :(得分:6)

问题是这些命令不属于bash。您需要的是所有这些实用程序的GNU版本,即grepls。至于getopts内置版,请检查您针对哪个版本开发脚本bash与您运行它的版本相比:

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

这是我的bash版本。如果你的生产环境有一个非常旧版本的bash,你需要使用bourne shell脚本,而不是bash脚本(Bourne Again SHell)来确保可移植的脚本。

修改:根据Olivier Dulac的答案进行整理,请查看the POSIX page on shell command language以获取便携式Bourne shell脚本。请查看适用于便携式选项的 ls grep 的POSIX标准页。

另一个编辑:有关标准实用程序的GNU变体,请参阅AIX Toolbox for Linux上的页面,这些变量已安装到/usr/linux/bin

又一个编辑:根据pedzthis link显示了更好的(100%兼容)AIX工具箱替换

答案 1 :(得分:0)

尽可能坚持标准......

如果您需要在各种系统上使用它们,请编写与sh兼容的脚本。

坚持广泛支持的古代选项(ls的-h选项,其他gnu引入的细节,很好,但不够便携)