并行运行几个脚本bash脚本
我有一个bash脚本,其中包含其他脚本内部运行的系列。 但是,它们需要花费相当多的时间才能运行。 有没有办法同时运行这些脚本来提高整体性能? 他们彼此独立。
它看起来类似于:
#!/bin/bash #some code here cppcheck.sh churn.sh run.sh
更新:
**git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1]) if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt** sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html'; unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0; set ylabel 'Number of lines changed (total)'; set title 'Files with high churn level';set boxwidth 0.7; set style fill solid; set noborder; plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot echo "finished running churn.sh!"
这是churn.sh中的代码。 大胆的命令需要40秒左右的时间来执行。 如果在主脚本中,我把&符号放在churn.sh&之后,它会抛出一个错误,说sed无法读取churn.txt文件(因为它还没有创build)。 它似乎不等到输出保存在文件中。 我插入了等待命令后,但它并没有帮助。
使用&
在后台运行它将会有所裨益
cppcheck.sh & churn.sh & run.sh & wait echo "All 3 complete"
它将为他们每个人分出一个新的过程。
如注释中所述,如果在完成这三个操作之后 ,您还需要在父脚本上运行某些内容,那么wait
也将派上用场。
如果没有参数,它将等待所有subprocess完成,然后继续执行父脚本。
你所面临的问题似乎与此直接相关。 variables集只对其定义的子shell可见。 因此,如果您在父脚本中指定了OUT_DIR
,那么在子脚本分离时它将不可见。 在这种情况下做正确的事情是将variables作为环境variablesexport
。