有时候,你可能希望 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)所有后台进程完成。
如果你把多个命令丢到后台执行。又不想用 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 &