我在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上运行?
答案 0 :(得分:6)
问题是这些命令不属于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.
这是我的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
答案 1 :(得分:0)
尽可能坚持标准......
如果您需要在各种系统上使用它们,请编写与sh兼容的脚本。
坚持广泛支持的古代选项(ls的-h
选项,其他gnu引入的细节,很好,但不够便携)