gpt4 book ai didi

bash - 并行 : How to reference multiple arguments from a function

转载 作者:行者123 更新时间:2023-11-29 09:31:10 25 4
gpt4 key购买 nike

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

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。我想要做的是让它也执行 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 不会削减它。

*script.sh 交换 $1 的位置不会削减它

最佳答案

您的问题不包含 MVCE https://stackoverflow.com/help/mcve特别是我不能直接在我的系统上运行你的代码。所以这个答案是基于我对我认为你正在尝试做的事情的最佳猜测。

假设您要为每个 *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)

关于bash - 并行 : How to reference multiple arguments from a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com