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

问题描述 投票:0回答:1

我有这个函数,我需要它使用 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
基本上通过将其作为
*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
交换位置不会减少

bash shell parallel-processing arguments gnu-parallel
1个回答
1
投票

假设您想为每个

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
的输出。

:::
后面的数据称为输入源。 https://zenodo.org/record/1146014的第 4 章介绍了处理输入源(打印:http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback /product-23558902.html

© www.soinside.com 2019 - 2024. All rights reserved.