getopt在AIX上不像在Linux中那样工作

时间:2014-12-09 10:25:05

标签: linux bash aix getopt

我在bash脚本中使用getopt,在Linux上运行正常。但是,在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

的开源脚本

1 个答案:

答案 0 :(得分:1)

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

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

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