I'm very new to bash scripting so please link me to places if I'm asking silly questions here!
I'm trying to write a bash script test-bash.sh
that will pass arguments from a txt file test-text.txt
to a .yml file test-yaml.yml
, to be used as child and subdirectory arguments (by that I mean e.g. /path/to/XXXX/child/
and /path/to/XXXX
where XXXX is the argument passed from the .sh script.
I'm really struggling to wrap my head around a way to do this so here is a small example of what I'm trying to achieve:
test-text.txt:
folder1
folder2
test-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'
test-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
Where the code enclosed in '~' symbols is pseudo code.
I've found this page on using export
, would this work in the looping case above or am I barking up the wrong tree with this?
Many thanks in advance for any help on this, I really appreciate it.
CodePudding user response:
Does envsubst
solve your problem?
For example, if I have a test-yaml.yml
that contains $foo
:
cat test-yaml.yml
output:
general:
$foo: argument_from_bash_script
rawdatadir: '/some/data/directory/$foo'
input: '/my/input/directory/$foo/input'
output: '/my/output/directory/$foo/output'
You can replace $foo
inside test-yaml.yml
with shell variable $foo
by envsubst
:
export foo=123
envsubst < test-yaml.yml
output:
general:
123: argument_from_bash_script
rawdatadir: '/some/data/directory/123'
input: '/my/input/directory/123/input'
output: '/my/output/directory/123/output'