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

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

我真的很难找到一种方法来做到这一点,所以这里有一个我想要实现的小例子:

测试文本.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

'~' 符号中的代码是伪代码。


我在使用 this page 时发现了 export ,这在上面的循环案例中是否有效,或者我是否用它来找错树?

stack overflow Passing bash script variables to .yml file for use as child and subdirectories
原文答案
author avatar

接受的答案

envsubst 能解决你的问题吗?

例如,如果我有一个包含 test-yaml.yml$foo

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'

您可以通过 $footest-yaml.yml 中的 $foo 替换为 shell 变量 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'

答案: