首页 > 解决方案 > 如何执行命令并将值分配给变量?

问题描述

我如何只返回Pending值?现在该命令返回整个 json 对象。

这是我到目前为止得到的,但不知道如何过滤出Pending

$DEPLOYMENT_ID      // env variable

$(aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID")

// returns:
{
    "deploymentInfo": {
        "applicationName": "WordPress_App",
        "status": "Succeeded",
        "deploymentOverview": {
            "Failed": 0,
            "InProgress": 0,
            "Skipped": 0,
            "Succeeded": 1,
            "Pending": 0
        },
       ...,
       ...,
    }
}

我想在 if else 块中运行命令,如下所示:

if [[ $(aws deploy get-deployment --deployment-id "$DEPLOYMENT_ID") = 0 ]] ;
then
  // do stuff
fi

标签: linuxbashshellunixterminal

解决方案


使用--query参数过滤响应。

get_pending () {
  aws --query 'deploymentInfo.deploymentOverview.Pending' \
    deploy get-deployment --deployment-id "$DEPLOYMENT_ID"
}

if [[ $(get_pending) = 0 ]]; then
    ...
fi

(shell 函数只是为了便于阅读。)

--query参数采用JMESPath 表达式,该表达式用于在将结果 JSON 返回给调用者之前对其进行过滤。


推荐阅读