非依赖命令的异步Bash脚本?

时间:2018-08-16 18:04:44

标签: bash

我基本上有10个左右的C ++文件,这些文件是通过命令行运行的。我最近制作了一个bash文件,该文件带有参数并运行所有C ++文件。它可能是一个最基本的sh命令。话虽这么说,是否有可能使它们异步运行?这些脚本都不相互依赖,并且有大量的CPU和RAM可以一次运行所有脚本。

脚本

#!/bin/sh

echo "running script 1..."
./script1 $1 $2 $3 $4

echo "running script 2..."
./script2 $1 $2 $3 $4

echo "running script 3..."
./script3 $1 $2 $3 $4

1 个答案:

答案 0 :(得分:2)

只需将&放在您要作为背景的每个命令之后,然后选择wait等待所有命令:

#!/bin/sh
echo "starting script 1..." 
# "$@" is equivalent to "$1" "$2" "$3"...
./script1 "$@" &

echo "starting script 2..."
./script2 --misc-flag=foo "$@" &

echo "starting script 3..."
./script3 --foobar &

echo "Waiting for all scripts to finish"
wait

或者,如果所有脚本都以与示例中相同的标记被相同的方式调用,请使用循环:

#!/bin/sh
for script in ./script*
do
  echo "Starting $script..."
  "$script" "$@" &
done

echo "Waiting..."
wait