簡體   English   中英

如何使用 jq 僅獲取鍵值對並將其設置為環境變量?

[英]How can I use jq to get the key value pairs only and set as environment variable?

下面是 vault 命令生成的 vault output

保險庫 kv 獲取 kv/環境 | jq

{
  "request_id": "8498e5e4-050a-51e9-deaf-64a06a0",
  "lease_id": "",
  "lease_duration": 0,
  "renewable": false,
  "data": {
    "data": {
      "test": "test123",
      "test1": "test1234"
    },
    "metadata": {
      "created_time": "2022-11-17T12:2214.93229792Z",
      "custom_metadata": null,
      "deletion_time": "",
      "destroyed": false,
      "version": 1
    }
  },
  "warnings": null
}

我無法找到一種方法來僅獲取 test 和 test1 並將其設置為 powershell 中的環境變量。問題是我只想提取 test 和 test1,但它位於 data/data 下,就像子列表一樣,無法找到提取方法。 請幫助

我已經提供了如下刪除路徑但不確定它是否有效循環

vault kv get kv/Env | jq 'del(.data.metadata, .request_id, .lease_id, .lease_duration, .renewable, .warnings)'

我想得到 output 類似下面的東西,我可以循環並設置為變量。

test=test123
test1=test1234

提供knittl 有用的jq answer全 PowerShell 替代方案,它還解決了設置環境變量的問題:

(vault kv get kv/Env | ConvertFrom-Json).data.data.psobject.Properties |
  % { Set-Item Env:$($_.Name) $_.Value }
  • ConvertFrom-Json將輸入 JSON 解析為一個 object 圖(基於類型[pscustomobject] ),以便可以使用常規的 OO 點表示法深入查看該圖,例如本例中的.data.data

  • 然后使用內在psobject屬性.Properties集合來反映 .data.data 中包含的.data.data的屬性

  • %ForEach-Object cmdlet 的內置別名)然后處理每個屬性並使用Set-ItemEnv:驅動器(代表所有進程內環境變量)為每個屬性的名稱和值設置環境變量。

您可以使用 .data.data 訪問嵌套的.data.data 您可以使用to_entries將 object 轉換為鍵值對列表。 那么就只剩下加入的問題了:

vault ... | jq -r '.data.data | to_entries[] | join("=")'

Output:

test=test123
test1=test1234

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM