执行本地脚本时GNU并行继承环境变量

时间:2016-08-05 07:46:58

标签: linux bash parallel-processing gnu-parallel

假设我foo.sh使用并行调用bar.sh

# foo.sh

#! /bin/bash

parallel -N 3 bar.sh ::: $(seq 10)

我的bar.sh的工作方式如下:如果设置了环境变量(例如DEBUG = 1),则会输出大量调试信息。

理想情况下,我想简单地执行我的foo.sh

$ DEBUG=1 foo.sh

通常情况下,foo.sh的值为$DEBUGbar.sh也会看到bar.sh。但是现在我使用GNU parallel调用bar.sh这是一个本地程序,我的DEBUG不再设置--env值。

我读到-S只有在设置了远程执行bar.sh时才有效,并且从我尝试它似乎对我不起作用。

有没有办法让我的并行foo.sh简单地“继承”我的bar.sh的环境设置?我真的不想在并行调用"String 1","String 2","String 3" 时拼出每个环境变量及其值。

TIA

2 个答案:

答案 0 :(得分:0)

要复制整个环境,请使用_作为--env导出的变量:

parallel --env _ -N 3 bar.sh ::: $(seq 10)

答案 1 :(得分:0)

您正在寻找正是这样做的env_parallel

将它放在$ HOME / .bashrc中:

  . `which env_parallel.bash`

E.g。通过做:

  echo '. `which env_parallel.bash`' >> $HOME/.bashrc

<强>别名

  alias myecho='echo aliases'
  env_parallel myecho ::: work
  env_parallel -S server myecho ::: work
  env_parallel --env myecho myecho ::: work
  env_parallel --env myecho -S server myecho ::: work

<强>功能

  myfunc() { echo functions $*; }
  env_parallel myfunc ::: work
  env_parallel -S server myfunc ::: work
  env_parallel --env myfunc myfunc ::: work
  env_parallel --env myfunc -S server myfunc ::: work

<强>变量

  myvar=variables
  env_parallel echo '$myvar' ::: work
  env_parallel -S server echo '$myvar' ::: work
  env_parallel --env myvar echo '$myvar' ::: work
  env_parallel --env myvar -S server echo '$myvar' ::: work

<强>阵列

  myarray=(arrays work, too)
  env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
  env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
  env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
  env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2

env_parallel是GNU Parallel 20160722的一部分。它是测试版质量,所以如果您发现错误,请报告错误。

如果你了解你的UNIX,你就会知道你不能在shell中使用别名,非导出函数,非导出变量和未导出的数组(例如在bash -c中);如果shell是远程的(例如ssh server myalias),尤其如此。使用env_parallel时,必须将此常识修改为:您不能在没有作弊的情况下