我已经弄明白了如何在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脚本中?
答案 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函数,会给我更多的灵活性,然后是别名。