在bash中启动别名时获取状态

时间:2017-06-19 17:54:30

标签: bash

我已经弄明白了如何在bash脚本中使用别名。他们确实被执行了,但我没有将结果反馈给变量" Status"。以下所有类型的启动别名在交互使用时都会得到结果,但是"状态"无论我是否使用" shopt -s expand_aliases"与否:

$ Status=`start_ETAP-TestCluster 2>/dev/null`
$ echo $Status
{"JobIds":["8c54392c-363c-4e28-827e-a1384da7fd37"]}

$ Status=`${BASH_ALIASES[start_NetIntel-Cluster]} 2>/dev/null`
$ echo $Status
{"JobIds":["dd05f5cb-a490-4fe3-b4fd-be61f62bbb88"]}

$ eval Status=`${BASH_ALIASES[start_NetIntel-Cluster]} 2>/dev/null`
$ echo $Status
{JobIds:[25a246ab-e5f5-4d65-80ea-4ff5e15cc02c]}

$ eval $(echo Status=`${BASH_ALIASES[start_NetIntel-Cluster]} 2>/dev/null`)
$ echo $Status
{JobIds:[4ce2f4e5-0599-47f5-b7f4-cd2ec1de9909]}

有没有人提供一些提示和想法如何在变量中得到结果" Status"在bash脚本中?

2 个答案:

答案 0 :(得分:1)

后引号之间或$()之间的命令由shell扩展到命令的输出。可以使用$检索退出状态?特殊变量。

output=$(command )    #  output=`command `  #old syntax
status=$?

否则标准输出和错误可以重定向到文件。

command 1> output_file 2> error_file
status=$?

此外,如果只需要退出状态成功,则可以使用逻辑运算符检查状态(退出状态== 0表示成功且逻辑值为true)

command 1> output_file 2> error_file || {
    echo failed
    exit 1
}

答案 1 :(得分:1)

感谢您的帮助和提示。主要问题是扩展别名(如start_ETAP-Cluster)无法正常工作。因此,在脚本中使用以下内容确实有所帮助:

shopt -s expand_aliases
source ~/.bash_aliases

在我的代码中使用$ Status会产生误导,我将其更改为$ JobID,这更好地反映了我想要的内容。我在别名中使用Web挂钩,它返回带有作业ID的JSON对象。还要分配$ Status = $?也有效。现在,代码在脚本中完成了它的工作:

$ JobID=$( ${BASH_ALIASES[start_ETAP-Cluster]} 2>/dev/null )
$ echo $JobID
{"JobIds":["8c54392c-363c-4e28-827e-a1384da7fd37"]}

下一步是将web钩子调用从别名移动到bash函数,会给我更多的灵活性,然后是别名。