2017-04-07 145 views
0

如何使用shell命令返回特定值? 在下面的例子我想查詢返回「StackStatus」,這是「CREATE_COMPLETE」Shell命令返回json輸出中的值

這裏的值是命令:

aws cloudformation describe-stacks --stack-name stackname 

這裏是輸出:

{ 
     "Stacks": [{ 
      "StackId": "arn:aws:cloudformation:ap-southeast-2:64560756805470:stack/stackname/8c8e3330-9f35-1er6-902e-50fae94f3fs42", 
      "Description": "Creates base IAM roles and policies for platform management", 
      "Parameters": [{ 
       "ParameterValue": "64560756805470", 
       "ParameterKey": "PlatformManagementAccount" 
      }], 
      "Tags": [], 

      "CreationTime": "2016-10-31T06:45:02.305Z", 
      "Capabilities": [ 
       "CAPABILITY_IAM" 
      ], 
      "StackName": "stackname", 
      "NotificationARNs": [], 
      "StackStatus": "CREATE_COMPLETE", 
      "DisableRollback": false 
     }] 
    } 
+0

如果你想:_StatusStatus的值是「CREATE_COMPLETE」_,**然後** StackStatus的值將是'CREATE_COMPLETE' ...不是嗎? – jm666

+0

如何使用shell命令返回「StackStatus」的值? – tset

回答

2

aws cli支持- 查詢選項來獲取零件。另外你也可以通過管道到另一個命令行工具jq來做類似的查詢。

但在AWS方式就可以得到第一結果:

aws cloudformation describe-stacks --stack-name stackname --query 'Stacks[0].StackStatus' --output text

基於上述輸出,堆棧是對象的數組(一個鍵/值),所以因此需要[ 0]獲取數組的第一個元素,然後.StackStatus是包含字符串作爲值的此對象中的一個鍵。 - 輸出文本只是將輸出呈現爲簡單的文本值,而不是顯示json的對象。

根據查爾斯評論編輯。

+0

很好的答案。這就是說 - 並且被認可,這是不太可能的 - 如果在運行該文件的當前目錄中有一個名爲'Stacks0.StackStatus'的文件,參數'Stacks [0] .StackStatus'將被解釋爲glob並被替換用那個名字。不太可能,如果沒有這樣的文件存在,並且你設置了'failglob'選項,那麼shell就會中止而不是執行命令;或者使用'nullglob',那個參數會被靜靜地從命令行中刪除。無論哪種情況,正確的答案是引用表達式:'--query'Stacks [0] .StackStatus'' –

+0

好點!總是最好引用特定於shell的東西;我在匆忙中忘了。 – strobelight