将 bash 脚本变量传递给 .yml 文件以用作子目录和子目录

Passing bash script variables to .yml file for use as child and subdirectories

我是 bash 脚本编写的新手,所以如果我在这里问愚蠢的问题,请 link 告诉我一些地方!

我正在尝试编写 bash 脚本 test-bash.sh,它将参数从 txt 文件 test-text.txt 传递到 .yml 文件 test-yaml.yml,以供使用作为子目录和子目录参数(我的意思是例如 /path/to/XXXX/child//path/to/XXXX 其中 XXXX 是从 .sh 脚本传递的参数。

我真的很难想出一个办法来做到这一点,所以这里有一个我正在努力实现的小例子:

测试-text.txt:

folder1
folder2

测试-yaml.yml:

general:
  XXXX: argument_from_bash_script
  rawdatadir: '/some/data/directory/XXXX'
  input: '/my/input/directory/XXXX/input'
  output: '/my/output/directory/XXXX/output'

测试-bash.sh:

#!/bin/bash

FILENAME="test-text.txt"    
FOLDERS=$(cat $FILENAME)

for FOLDER in $FOLDERS
do
        ~ pass FOLDER to .yml file as argument ~
        ~ run stuff using edited .yml file ~
done

其中用'~'符号括起来的代码是伪代码。


我在使用 export 时发现了 this page,这在上面的循环情况下是否有效,还是我用这个找错树了?

非常感谢您对此提供的任何帮助,我真的很感激。

envsubst能解决您的问题吗?

例如,如果我有一个包含 $foo:

test-yaml.yml
cat test-yaml.yml 

输出:

general:
  $foo: argument_from_bash_script
  rawdatadir: '/some/data/directory/$foo'
  input: '/my/input/directory/$foo/input'
  output: '/my/output/directory/$foo/output'

您可以将 test-yaml.yml 中的 $foo 替换为 shell 变量 $foo 通过 envsubst:

export foo=123
envsubst < test-yaml.yml 

输出:

general:
  123: argument_from_bash_script
  rawdatadir: '/some/data/directory/123'
  input: '/my/input/directory/123/input'
  output: '/my/output/directory/123/output'