我在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
的开源脚本答案 0 :(得分:1)
基本问题是AIX上的getopt
不是来自linux的getopt。 linux下的那个支持长选项,而AIX上的那个不支持。这与Mac OSX上的情况相同。
可以通过而不是使用长选项作为可用选项的一部分来解决,即从命令行中删除--long database:,help,instance: -n ${APPL_NAME} --
,因为它们不支持AIX版本的getopt参数
或者你可以安装gnu getopt的副本,并选择该程序进行参数解析。