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 吗?STATUS1
STATUS2
答案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 作业控制)。