【问题标题】:How to parse output from a kubectl command into an array for a bash script如何将 kubectl 命令的输出解析为 bash 脚本的数组
【发布时间】:2019-04-25 13:04:11
【问题描述】:

我有这个 kubectl 命令,它给了我以下输出。我需要知道如何将输出存储在一个数组中,这样我就可以遍历其中的每一个,并进一步对资源发出 gcloud 命令。

kubectl get ingress test-load-balancer -o jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/backends}'| jq  -r 'keys'

[
  "k8s-be-30423--12305b0f030d5a48",
  "k8s-be-31245--10023b0f030d5a48"
]

但是,现在我需要在 bash 脚本中为这些 k8s-xx 资源运行单独的命令。我尝试了以下方法,但它没有将输出保存在数组中

read BACKEND_SERVICES<<<$(kubectl get ingress cysiv-load-balancer -o \

jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/backends}'| jq -r 'keys')

提前谢谢你

【问题讨论】:

  • 我的意思是,我尝试了以下方法,但没有成功。 read -t BACKEND_SERVICES
  • 看起来你应该把命令分成两部分。先获取jsonpath,然后:read -t BACKEND_SERVICES
  • 将 kubectl 的输出添加到您的问题中。
  • 这是 kubectl 的输出。如果您有办法直接从 kubectl 获取“密钥”,那也很棒 kubectl get ingress cysiv-load-balancer -o jsonpath='{.metadata.annotations.ingress\.kubernetes\.io/backends} ' {"k8s-be-30423--74546b0f030d5a48":"健康","k8s-be-31245--74546b0f030d5a48":"健康"}

标签: bash kubectl


【解决方案1】:

我假设您的密钥不包含空格。

array=($(kubectl ... | jq -r 'keys[]'))
declare -p array

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2021-12-03
    • 2020-01-06
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多