从 yml 获取变量值并传递给 shell 脚本?
Fetch variables values from yml and pass to shell script?
data.yml
variables:
count: "100"
name: "sss"
pass: "123"
file.sh
#!/bin/bash
echo "Details are "$name":"$pass" - Total value "$count"
我需要从 data.yml 获取变量值并传递给 file.sh
调用 file.sh 应该给出输出:
Details are sss:123 - Total value 100
有一个cli工具yq
可以解析yaml文件。
脚本如下所示:
#!/usr/bin/env bash
name=$(yq '.variables.name' data.yaml)
pass=$(yq '.variables.pass' data.yaml)
count=$(yq '.variables.count' data.yaml)
echo "Details are $name: $pass - Total value $count"
当然你也可以将文件作为参数传递。
您可以使用对 yq
的单个调用并将值放入数组中:
#!/usr/bin/env bash
mapfile -t array < <(yq '.variables[]' data.yml)
declare -p array
从yq
中读取名称值对并使用bashprintf -v
初始化变量。
有点过头了,但是初始化脚本的好方法。
请注意,添加变量不会更改 while 循环。
file.sh
#!/bin/bash
while read -r key val; do
printf -v "$key" "$val"
done < <(yq -r '.variables | keys[] as $k | "\($k) \(.[$k])"' data.yml)
echo "Details are $name: $pass - Total value $count"
echo 'Some extra variables:'
echo "$address: $address, $phone: $phone, $url: $url"
data.yml
variables:
count: "100"
name: "sss"
pass: "123"
address: "42 Terrapin Station"
phone: "999-999-9999"
url: "http://www.examle.com"
输出
Details are sss: 123 - Total value 100
Some extra variables:
$address: 42 Terrapin Station, $phone: 999-999-9999, $url: http://www.examle.com
data.yml
variables:
count: "100"
name: "sss"
pass: "123"
file.sh
#!/bin/bash
echo "Details are "$name":"$pass" - Total value "$count"
我需要从 data.yml 获取变量值并传递给 file.sh
调用 file.sh 应该给出输出:
Details are sss:123 - Total value 100
有一个cli工具yq
可以解析yaml文件。
脚本如下所示:
#!/usr/bin/env bash
name=$(yq '.variables.name' data.yaml)
pass=$(yq '.variables.pass' data.yaml)
count=$(yq '.variables.count' data.yaml)
echo "Details are $name: $pass - Total value $count"
当然你也可以将文件作为参数传递。
您可以使用对 yq
的单个调用并将值放入数组中:
#!/usr/bin/env bash
mapfile -t array < <(yq '.variables[]' data.yml)
declare -p array
从yq
中读取名称值对并使用bashprintf -v
初始化变量。
有点过头了,但是初始化脚本的好方法。
请注意,添加变量不会更改 while 循环。
file.sh
#!/bin/bash
while read -r key val; do
printf -v "$key" "$val"
done < <(yq -r '.variables | keys[] as $k | "\($k) \(.[$k])"' data.yml)
echo "Details are $name: $pass - Total value $count"
echo 'Some extra variables:'
echo "$address: $address, $phone: $phone, $url: $url"
data.yml
variables:
count: "100"
name: "sss"
pass: "123"
address: "42 Terrapin Station"
phone: "999-999-9999"
url: "http://www.examle.com"
输出
Details are sss: 123 - Total value 100 Some extra variables: $address: 42 Terrapin Station, $phone: 999-999-9999, $url: http://www.examle.com