如何并行运行多个脚本

cro*_*oss 3 bash perl shell-script parallelism

我有一个 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
Run Code Online (Sandbox Code Playgroud)

通过一次调用一个 perl 脚本来收集结果真的很长;我正在寻找一种方法,可以让我在 bash 脚本中并行调用 perl 脚本的不同变体。有没有办法在 bash 中实现这一目标?

只是为了澄清,我不希望调用 perl 脚本的命令以任何方式相互依赖。我希望所有这些都在同一时间点开始,就好像我有 4 个单独的 bash 终端,每个终端都执行这些命令之一。

类似:https : //stackoverflow.com/questions/15644991/running-several-scripts-in-parallel-bash-script

don*_*sti 5

如果已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
Run Code Online (Sandbox Code Playgroud)

然后并行运行它们:

mkdir ./results/csv && parallel :::: myscript.sh
Run Code Online (Sandbox Code Playgroud)

或者,调用命令并使用{}- 默认替换字符串:

mkdir ./results/csv && parallel ../perlscripts/v2csv.pl -v -F {} \
results/Heterogeneous*.vec '>' ./results/csv/{}.csv ::: reach roundTrip downlink clusters
Run Code Online (Sandbox Code Playgroud)

将并行运行以下命令:

../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
Run Code Online (Sandbox Code Playgroud)