head和bash脚本之间的行为不同

时间:2017-06-22 01:50:30

标签: linux bash

在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 ']'

0 个答案:

没有答案