是否可以在Shell脚本中同时运行两个命令?


10

我知道可以在命令行上&在后台运行命令。但是我想知道是否可以在脚本中做到这一点。

我有一个像这样的脚本:

date_stamp=$(date +"%Y-%m-%d" --date='yesterday')
shopt -s extglob

cd /my/working/directory/

sh ./stay/get_it_ios.sh
sh ./stay/get_it_mix.sh

cd stay
zip  ../stay_$date_stamp.zip  ./*201*

rm ./stay/!(*py|*sh)

我想运行sh ./stay/get_it_ios.shsh ./stay/get_it_mix.sh合力得到更为准确的数据。是否可以在Shell脚本的范围内执行此操作?

Answers:


16

是的。如果要同时执行两项操作,并等待它们都完成,则可以执行以下操作:

sh ./stay/get_it_ios.sh &  PIDIOS=$!
sh ./stay/get_it_mix.sh &  PIDMIX=$!
wait $PIDIOS
wait $PIDMIX

然后,您的脚本将并行运行两个脚本,并等待两个脚本完成之后再继续。


4
您可以wait不带参数地运行一个,以等待两个进程。
斯特凡Chazelas

2
除非在脚本的前面,否则您将在第三个过程中后台运行,而该过程应该一直持续到以后。wait我认为,最好肯定地声明您要干什么。
DopeGhoti

当您说并行运行两个脚本时,是否意味着它们将同时启动?我的意思是,假设我们能够非常精确地记录时间(例如,使用原子钟)。两者应该一起开始吗?我问是因为脚本逐行读取,对吗?
Sigur

1
如您所料,脚本将不会在时钟周期的同一时刻开始执行。Shell脚本按照给定的顺序运行命令,因此,如果仅(几乎在所有情况下)非常轻微,则第一个后台命令将在第二个命令之前运行。当我说它们将“并行运行”时,我的确切意思是:两者将同时运行(取决于作业管理,信号处理和/或内核优先级)。
DopeGhoti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.