如何用Linux命令的输出来输入变量[duplicate]

ifmq2ha2  于 2022-11-02  发布在  Linux
关注(0)|答案(2)|浏览(171)

此问题在此处已有答案

How do I set a variable to the output of a command in Bash?(共15个答案)
Edit YAML file with Bash(5个答案)
Fetch variables values from yml and pass to shell script?(3个答案)
20小时前就关门了。
我正在尝试将一个linux命令的输出作为输入发送到variable。

cat init.txt | grep glal20213lvdlb04
glal13lvd

这个命令的输出应该放在yml文件的“vm_name”中。
第一个
任何帮助都将不胜感激

pbgvytdp

pbgvytdp1#

您可以使用yq来取代YAML。
使用yq的strenv()来获取bash env变量。
我们可以使用以下命令导出所需的值

export newValue="$(grep glal20213lvdlb04 init.txt)"

然后生成YAML:

yq e '.resources.instance01.properties.vm_name = strenv(newValue)' instant.yml

输出:

resources:
  instance01:
    type: ../../../templates/ipnf.yaml
    properties:
      vm_name: 'glal20213lvdlb04'
      vm_flavour: 'dsolate'
      image_name: 'pdns_14121207'
      vm_az: 'az-1'
      vm_disk_root_size: '50'
      vm_disk_data_size: '50'
      network_mgmt_refs: 'int:dxs_pcg'
      network_mgmt_ip: '10.194.112.75'
p1iqtdky

p1iqtdky2#

虽然我会推荐一个合适的YAML处理器,如yq,但对于您的特定情况,您也许可以使用sed

var=$(grep 'glal20213lvdlb04' init.txt) ; sed -i'' -e "s/THE OUTPUT SHOULD COME HERE/${var}/g" instant.yaml

输出量:

resources:

  instance01:
    type: ../../../templates/ipnf.yaml
    properties:
      vm_name: 'glal20213lvdlb04'
      vm_flavour: 'dsolate'
      image_name: 'glal20213lvdlb04'
      vm_az: 'az-1'
      vm_disk_root_size: '50'
      vm_disk_data_size: '50'
      network_mgmt_refs: 'int:dxs_pcg'
      network_mgmt_ip: '10.194.112.75'

相关问题