我有一个bash脚本,它以串行方式调用相同的perl脚本。bash脚本用于收集总体结果,而perl脚本则收集给定属性的模拟结果。
bash脚本如下所示:
mkdir ./results/csv && \
../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/RT.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/DL.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv通过一次调用一个perl脚本来收集结果真的很长;我正在寻找一种方法,允许我并行地调用bash脚本中perl脚本的不同变体。有没有办法在bash中实现这一点?
为了澄清这一点,我不希望调用perl脚本的命令以任何方式相互依赖。我希望它们都在同一时间点开始,就好像我有4个独立的bash终端,每个都执行这些命令中的一个。
相似:https://stackoverflow.com/questions/15644991/running-several-scripts-in-parallel-bash-script
发布于 2015-03-17 22:33:02
如果安装了gnu parallel,就可以使用命令创建脚本,例如:
../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/RT.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/DL.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv然后并行运行它们:
mkdir ./results/csv && parallel :::: myscript.sh或者,调用命令并使用{} --默认替换字符串:
mkdir ./results/csv && parallel ../perlscripts/v2csv.pl -v -F {} \
results/Heterogeneous*.vec '>' ./results/csv/{}.csv ::: reach roundTrip downlink clusters将并行运行以下命令:
../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/roundTrip.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/downlink.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv发布于 2015-03-17 19:46:19
../_Cscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv &
../_Cscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/RT.csv &
../_Cscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/DL.csv &
../_Cscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv &
wait&把程序放在后台。如果你在乎的话等着他们停下来。
发布于 2015-03-17 19:49:06
您可以尝试以下语法:
mkdir ./results/csv && (script0 & script1 &)这将在后台运行脚本,而不是等待它们完成。括号引入一个子shell组(如果mkdir命令失败,就不会运行脚本),&请求后台执行(立即将控制返回到外部shell)。
https://unix.stackexchange.com/questions/190810
复制相似问题