У меня есть эта функция, и мне нужно, чтобы она ссылалась на несколько аргументов функции, использующей параллельный GNU.
foo () {
cd ${HOME}/sh/xxx/xxx/xxx/folder_with_scripts
bash -H $1 #replace with echo in test run {echo $1 is being echoed}
bash -H $2 #replace with echo in test run {echo $2 is being echoed}
}
export -f foo
parallel foo ::: *script.sh bash*.sh
$ ls
firstscript.sh
secondscript.sh
thirdscript.sh
bashhim.sh
bashscript.sh
bashher.sh
parallel foo в основном выполняет все сценарии, следующие за *script.sh внутри, ссылаясь на него как на аргумент внутри foo. Это $1. Я пытаюсь сделать так, чтобы он также выполнял bash*.sh*, которые находятся в каталоге folders_with_scripts, с помощью $2.
Согласно man parallel, синтаксис следующий:
parallel [options] [command [arguments]] ( ::: arguments | :::: argfile(s) )
Поскольку ::: arguments имеет множественное число, я предполагаю, что это вполне возможно.
bash на echo$ ./foo.sh
firstscript.sh is being echoed
secondscript.sh is being echoed
thirdscript.sh is being echoed
is being echoed
is being echoed
is being echoed
firstscript.sh is being echoed
secondscript.sh is being echoed
thirdscript.sh is being echoed
bashhim.sh is being echoed
bashscript.sh is being echoed
bashher.sh is being echoed
parallel foo ::: *.sh не подойдет.$1 на *script.sh не поможет.




Ваш вопрос не содержит MVCE https://stackoverflow.com/help/mcve В частности, я не могу запустить ваш код непосредственно в моей системе. Итак, этот ответ основан на моем лучшем предположении о том, что, я думаю, вы пытаетесь сделать.
Предполагая, что вы хотите запустить все bash*.sh для каждого *script.sh:
parallel foo ::: *script.sh ::: bash*.sh
Если каждый bash*.sh связан с *script.sh (:::+ представлен в версии 20160422):
parallel foo ::: *script.sh :::+ bash*.sh
Протестируйте с --dry-run:
parallel --dry-run foo ::: *script.sh ::: bash*.sh
parallel --dry-run foo ::: *script.sh :::+ bash*.sh
Если это не ответ на ваш вопрос, обновите вопрос, указав, какие команды вы хотите запустить GNU Parallel, например:
foo firstscript.sh bashhim.sh
foo secondscript.sh thirdscript.sh
foo bashscript.sh bashher.sh
и покажите вывод echo *script.sh bash*.sh в каталоге, в котором вы запускаете parallel.
Данные, лежащие в основе :::, называются источником ввода.
Работа с источниками входного сигнала описана в главе 4 документа https://zenodo.org/record/1146014 (напечатано: http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html).