代码之家  ›  专栏  ›  技术社区  ›  Caucasian Malaysian

parallel:如何从函数中引用多个参数

  •  2
  • Caucasian Malaysian  · 技术社区  · 6 年前

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

    包含脚本内容的文件夹

    $ 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美元 具有 *脚本.sh 不会切的

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ole Tange    6 年前

    你的问题不包含MVCE https://stackoverflow.com/help/mcve 尤其是我不能直接在我的系统上运行你的代码。所以这个答案是基于我对你的猜测。

    假设你想跑完全程 bash*.sh 为每个人 *script.sh :

    parallel foo ::: *script.sh ::: bash*.sh
    

    如果每个 猛击*.sh 链接到 *脚本.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并行运行的命令更新问题,例如:

    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 (印刷体: http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html )