在RHEL 7上的bash下运行交互式CLI与脚本之间存在奇怪的行为.CLI运行正常,但bash脚本不会产生相同的输出。我错过了什么?
#! /bin/bash
JBOSS_HOME=${JBOSS_HOME:-"/opt/jboss/EAP-6.4.0"}
function jboss-cli {
sudo $JBOSS_HOME/bin/jboss-cli.sh -c "$1"
}
function check_jboss_status {
set -x
status=$(jboss-cli --command=':read-attribute(name=server-state)' 2>&1 | head -n 1 | grep -E -i -n 'CliInitializationException|System boot')
[ -z "$status" ] && has_exception=0 || has_exception=1
echo $has_exception
set +x
exit 0 # <= strictly for testing
return $has_exception
}
产生
++ jboss-cli '--command=:read-attribute(name=server-state)'
++ head -n 1
++ grep -E -i -n 'CliInitializationException|System boot'
+ status=
++ jboss-cli '--command=:read-attribute(name=server-state)'
++ head -n 1
++ grep -E -i -n 'CliInitializationException|System boot'
+ echo
+ '[' -z '' ']'
+ has_exception=0
+ echo 0
0
+ set +x
设置我的bash环境:
$ function jboss-cli { sudo $JBOSS_HOME/bin/jboss-cli.sh -c "$1"; }
$ status=$(jboss-cli --command=':read-attribute(name=server-state)' 2>&1 | head -n 1 | grep -E -i -n 'CliInitializationException|System boot')
$ [ -z "$status" ] && has_exception=0 || has_exception=1
$ echo $has_exception
1
编辑:
进一步的测试表明,通过头部的管道是问题所在。正如我的评论所示,删除该管道操作允许该函数在脚本中正常运行。在这个序列中是否有管道发生了一些时髦的事情,或者是头祸?
编辑#2:显示bash脚本在通过头部移除管道时正常工作(即,我更改了原始函数):
status=$(jboss-cli --command=':read-attribute(name=server-state)' 2>&1 | grep -E -i -n 'CliInitializationException|System boot')
成功获得grep:
+ check_jboss_status
++ jboss-cli '--command=:read-attribute(name=server-state)'
++ grep -E -i -n 'CliInitializationException|System boot'
+ status='2:org.jboss.as.cli.CliInitializationException: Failed to connect to the controller'
+ '[' -z '2:org.jboss.as.cli.CliInitializationException: Failed to connect to the controller' ']'
+ has_exception=1
+ return 1
+ '[' 1 -ne 0 ']'