0

我在 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 上工作?

4

2 回答 2

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的回答,请查看关于可移植 Bourne shell 脚本的 shell 命令语言的 POSIX 页面。请查看ls的 POSIX 标准页面和grep的可移植选项。

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

另一个编辑:根据pedz此链接显示了 AIX 工具箱的更好(100% 兼容)替代品

于 2013-06-17T12:50:56.463 回答
0

尽可能地遵守标准...

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

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

于 2013-06-17T15:18:01.367 回答