IMLC.ME

bash 如何同时运行多个命令

有时候,你可能希望 bash 脚本同时执行多个命令,以加速脚本运行速度。
一个常见的例如是,你希望同时下载多个文件,而不是一个一个排队下载。下方的代码演示了如何并行下载文件。

sleep 10 && echo '[file1.zip] done' &
sleep 5 && echo '[file2.zip] done' &
sleep 7 && echo '[file3.zip] failed' && exit 1 &
wait
echo 'all done'

这里的关键是 &wait 命令。
& 操作符会把任务放到后台运行。所以你可以在当前命令还在执行的过程中,执行下一条命令。
wait 命令会等待(当前shell)所有后台进程完成。

jobs 命令

如果你把多个命令丢到后台执行。又不想用 wait 命令等待所有后台任务完成。 你可以使用 jobs 命令打印当前shell执行的后台命令的状态。

 jobs
[1]   Running                 sleep 10 && echo '[file1.zip] done' &
[2]-  Running                 sleep 5 && echo '[file2.zip] done' &
[3]+  Running                 sleep 7 && echo '[file3.zip] failed' && exit 1 &