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

Parallel: How to reference multiple arguments from a function

我有这个函数,我需要它使用 GNU parallel 从一个函数中引用多个参数。

foo () {

    cd ${HOME}/sh/xxx/xxx/xxx/folder_with_scripts
    bash -H  #replace with echo in test run {echo  is being echoed}
    bash -H  #replace with echo in test run {echo  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 之后的所有脚本。即 </code>。我想要做的是让它也通过使用 <code>.

执行 folders_with_scripts 目录中的 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 不会削减它。

</code> 的位置与 <code>*script.sh 交换位置不会削减它

你的问题不包含 MVCE https://whosebug.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

并在 运行 parallel.

所在的目录中显示 echo *script.sh bash*.sh 的输出

:::后面的数据称为输入源。 https://zenodo.org/record/1146014 (Printed: http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html)

的第 4 章介绍了处理输入源