shell 并行:如何从函数中引用多个参数

gkl3eglg  于 11个月前  发布在  Shell
关注(0)|答案(1)|浏览(101)

我有这个函数,我需要它引用多个参数从一个函数使用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

字符串

folder_with_scripts内容

$ ls
firstscript.sh
secondscript.sh
thirdscript.sh
bashhim.sh
bashscript.sh
bashher.sh


parallel foo基本上是通过引用foo内部的参数来执行*script.sh之后的所有脚本。也就是$1。我试图做的是让它也执行$2目录中的bash*.sh*
根据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的位置交换不会削减它

eufgjt7s

eufgjt7s1#

假设你想为每个*script.sh运行所有的bash*.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


并在运行parallel的目录中显示echo *script.sh bash*.sh的输出。
:::背后的数据称为输入源。处理输入源在https://zenodo.org/record/1146014的第4章中介绍(印刷版:http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html

相关问题