【问题标题】:getopt is not working on AIX as it does in Linuxgetopt 不像在 Linux 中那样在 AIX 上工作
【发布时间】:2015-02-07 04:58:24
【问题描述】:

我在一个在 Linux 上运行良好的 bash 脚本中使用了 getopt。但是在AIX上执行时,输出就不一样了:

AIX 输出

TEMP=$(getopt -o d:hi: --long database:,help,instance: -n ${APPL_NAME} -- "${@}")
getopt -o d:hi: --long database:,help,instance: -n ${APPL_NAME} -- "${@}"
++ getopt -o d:hi: --long database:,help,instance: -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv
+ TEMP='-- d:hi: --long database:,help,instance: -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv '

Linux 输出

TEMP=$(getopt -o d:hi: --long database:,help,instance: -n ${APPL_NAME} -- "${@}")
getopt -o d:hi: --long database:,help,instance: -n ${APPL_NAME} -- "${@}")
getopt -o d:hi: --long database:,help,instance: -n ${APPL_NAME} -- "${@}"
++ getopt -o d:hi: --long database:,help,instance: -n nagios -- -i /home/db2inst1 -d sample
+ TEMP=' -i '\''/home/db2inst1'\'' -d '\''sample'\'' --'

如您所见,TEMP 中的值在 AIX 中无效,脚本无法继续。

为什么会出现这个问题?怎么解决?

这是一个开源脚本托管在:https://github.com/angoca/monitor-db2-with-nagios/blob/master/check_database_connection

【问题讨论】:

    标签: linux bash aix getopt


    【解决方案1】:

    基本问题是 AIX 上的 getopt 不是来自 linux 的 getopt。 linux 下的支持长选项,而 AIX 上的不支持。这与 Mac OSX 上的情况相同。

    not 可以通过使用长选项作为可用选项的一部分来解决它,即从命令行中删除 --long database:,help,instance: -n ${APPL_NAME} --,因为 AIX 版本的 getopt 不支持它们。

    或者,您可以安装 gnu getopt 的副本,然后选择该程序进行参数解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多