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

0 linux bash aix gnu

我在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上运行?

Sam*_*een 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.
Run Code Online (Sandbox Code Playgroud)

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

编辑:从Olivier Dulac的回答中加入Plagarizing ,请查看shell命令语言的POSIX页面,以获取可移植的Bourne shell脚本.请查看适用于便携式选项的lsgrep的POSIX标准页面.

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

另一个编辑:根据pedz,这个链接显示了更好的(100%兼容)AIX Toolbox的替换