使用 GNU Parallel 时,在 bash 脚本中使用 EXPORT 有多安全?

使用 GNU Parallel 时,在 bash 脚本中使用 EXPORT 有多安全?

export使用 GNU Parallel 时,在 bash 脚本中使用有多安全?

我有一个父脚本。父级.sh

(echo child.sh & echo child_two.sh) || parallel bash

wait
if [[ "$STATUS1" == "0" && "$STATUS2" == "0" ]];
then
    //continue
else
    //stop the process
fi

孩子.sh

STATUS1基于另一个进程获取

export STATUS1

child_two.sh

根据另一个进程获取 STATUS2

export STATUS2

使用起来是否安全,并且&export的值在每次运行时都会得到 resrt 吗?STATUS1STATUS2

答案1

环境变量被传递到子进程中,而不是相反。

如果您想将信息传输到父进程,那么您需要将此数据放入每个子进程的一个文件中,并cat在子进程结束后将这些文件放入这些文件中。

tmp=$(mktemp -d)
child.sh $tmp/file & child_two.sh $tmp/file_two
wait 
cat $tmp/* 
rm $tmp -rf

如果您想进行一些优化,请随意使用更高级的语言。

答案2

我认为您将从研究中受益parset https://www.gnu.org/software/parallel/parset.html

$ parset myvar 'echo do stuff with {};(exit {}); echo $?' ::: 0 0 1 2 3 0 0
$ echo "${myvar[3]}"

答案3

你不能这样做,因为export在一个即将被丢弃的进程中设置一个变量;父母永远看不到它。

但是,假设您使用的是 bash,您也不需要:

child.sh &
child_two.sh &

wait -n
STATUS1=$?
wait -n
STATUS2=$?

返回wait -n退出状态的过程,并重复它从获取状态其他

这个配方的唯一问题是没有办法知道哪个状态来自哪个进程(如果您需要阅读 bash 作业控制)。

相关内容