【问题标题】:Getting status when launching an alias in bash在 bash 中启动别名时获取状态
【发布时间】:2017-06-19 17:54:30
【问题描述】:

我已经弄清楚如何在 bash 脚本中使用别名。他们确实被执行了,但我没有在变量“状态”中得到结果。以下所有启动别名的类型在交互使用时都会返回结果,但无论我是否使用“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]}

有没有人有一些提示和想法如何在 bash 脚本中的变量“状态”中获取结果?

【问题讨论】:

  • 为什么用 java、python、r 和 scala 标记?
  • 是否要获取命令 any_var=start_ETAP-TestCluster 2>/dev/null 的退出状态?如果是,那么您可以使用 status=$?在你的命令之后。

标签: bash


【解决方案1】:

反引号之间或$() 之间的命令被shell 扩展为命令的输出。退出状态可以用 $?特殊变量。

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

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

command 1> output_file 2> error_file
status=$?

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

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

【讨论】:

    【解决方案2】:

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

    shopt -s expand_aliases
    source ~/.bash_aliases
    

    在我的代码中使用 $Status 具有误导性,我将其更改为 $JobID,这更好地反映了我想要的。我在别名中使用网络挂钩,它返回一个带有作业 ID 的 JSON 对象。此外分配 $Status=$?也可以。现在代码在脚本中完成了它的工作:

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

    下一步是将网络挂钩调用从别名转移到 bash 函数,这将给我比别名更多的灵活性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多