0

我正在尝试yaml从 bash 脚本中读取文件中的值

这就是我的 yaml 的样子

apiVersion: v1
data:
  consul-write: 100
kind: Secret

我需要得到consul-write. (在这种情况下是,100

我怎样才能得到这个值 bash

此命令输出上述 yaml

kubectl get secrets consul-write -n test -o yaml

这是我尝试过的。有人可以帮帮我吗?

NAMESPACE=$1
TOKEN_NAME=$2

KUBE_GET=$(kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml)

echo $KUBE_GET
4

3 回答 3

1

使用 awk 在匹配 TOKEN_NAME 的行上挑选字段 2

 kubectl get secrets $TOKEN_NAME -n $NAMESPACE -o yaml | awk -vns=$TOKEN_NAME '$1 ~ ns {print $2}'

编辑:固定变量和多行输出。

于 2020-04-06T11:45:13.147 回答
0

我建议使用yq。请查看其文档以获取安装详细信息。
安装 yq 后,您可以在命令行中输入以下命令:

# yq r your_yaml_file 'data."consul-write"'

如果有效,请将其放入 bash 文件中。

于 2020-04-06T11:38:56.263 回答
0

尝试这个:

NAMESPACE="$1"
TOKEN_NAME="$2"

KUBE_GET=$(kubectl get secrets "$TOKEN_NAME" -n "$NAMESPACE" -o yaml)

grep "$TOKEN_NAME" <<< "$KUBE_GET" | sed 's/.*: \(.*\)$/\1/'

解释:

这将找到包含给定令牌名称的第一行:

grep "$TOKEN_NAME" <<< "$KUBE_GET"

这将在 grep 找到的行中找到字符串“:”,然后返回该字符串之后的其余行:

sed 's/.*: \(.*\)$/\1/'
于 2020-04-06T11:37:25.387 回答