我在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上运行?
问题是这些命令不属于bash.你需要的是所有这些实用程序的GNU版本,即grep和ls.至于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脚本.请查看适用于便携式选项的ls和grep的POSIX标准页面.
另一个编辑:请参阅AIX Toolbox for Linux上的页面,了解安装到的标准实用程序的GNU变体/usr/linux/bin
另一个编辑:根据pedz,这个链接显示了更好的(100%兼容)AIX Toolbox的替换