簡體   English   中英

用於從 yml 文件中獲取值數組的 Linux bash 腳本

[英]Linux bash script to get an array of value from a yml file

我有一個 environment.yml 之類的

channels:
  - defaults
dependencies:
  - flask
  - gunicorn = 0.22.0
  - pandas=0.21.1
  - pip
  - pip:
    - six==1.14.0
    - requests ==2.21.0
    - pytz

我想在一個數組中獲取所有 python 包。

    packagesArray=("flask" "gunicorn" "pandas" "pip" "six" "requests" "pytz" )

我們怎么能做到這一點?

使用yq的一種方法,這是一個方便的前端,可以將 YAML 轉換為 JSON,然后將其提供給jq

readarray -t packagesArray < <(yq -r '.dependencies | .. | select(type == "string") | sub("=.*";"")' environment.yaml) 

在此之后, declare -p packagesArray將顯示

declare -a packagesArray=([0]="flask" [1]="gunicorn " [2]="pandas" [3]="pip" [4]="six" [5]="requests " [6]="pytz")

您可以在 python3 中嘗試以下類似的操作:

#!/usr/bin/env python3

import yaml

def read_yaml(filename):
    try:
        with open(filename, 'r') as file:
            data_yml = yaml.safe_load(file)
            return data_yml

    except BaseException as e:
        msg = 'Yaml File: ' + str(e)
        print(msg)


data = read_yaml('environment.yml')

for key, value in data.items():
    print(f"\nkey - {key}\nvalue - {value}\n") 

如果您仍想使用 bash,請查看以下鏈接:

閱讀 yaml bash

暫無
暫無

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

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