Apakah mungkin menjalankan dua perintah pada saat yang sama dalam skrip shell?

10

Saya tahu bahwa pada baris perintah saya dapat menggunakan &untuk menjalankan perintah di latar belakang. Tapi saya bertanya-tanya apakah saya bisa melakukannya dalam naskah.

Saya punya skrip seperti ini:

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)

Dan saya ingin menjalankan sh ./stay/get_it_ios.shdan sh ./stay/get_it_mix.shbersama - sama untuk mendapatkan data yang lebih akurat. Apakah mungkin untuk melakukan ini dalam lingkup skrip shell?

Zen
sumber

Jawaban:

16

Ya itu. Jika Anda ingin melakukan dua hal secara bersamaan, dan menunggu keduanya selesai, Anda dapat melakukan sesuatu seperti:

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

Script Anda kemudian akan menjalankan kedua skrip secara paralel, dan menunggu kedua skrip selesai sebelum melanjutkan.

DopeGhoti
sumber
4
Anda bisa menjalankan satu waittanpa argumen untuk menunggu kedua proses.
Stéphane Chazelas
2
Kecuali sebelumnya di dalam skrip, Anda akan melatarbelakangi proses ketiga yang seharusnya dijalankan hingga titik selanjutnya. Lebih baik menyatakan secara tegas apa yang Anda inginkan wait, menurut saya.
DopeGhoti
Ketika Anda mengatakan jalankan kedua skrip secara paralel, maksud Anda bahwa skrip akan mulai pada saat yang sama? Maksud saya, misalkan kita dapat mendaftarkan waktu dengan presisi yang sangat besar (misalnya, menggunakan jam atom). Keduanya harus mulai bersama? Saya bertanya karena skrip membaca baris demi baris, bukan?
Sigur
1
Saat Anda menduga, skrip tidak akan memulai eksekusi pada saat yang sama hingga siklus clock. Script Shell menjalankan perintah dalam urutan yang diberikan, sehingga perintah latar belakang pertama akan berjalan sebelum yang kedua jika saja (dalam hampir semua kasus) sangat sedikit. Ketika saya mengatakan mereka akan "berjalan secara paralel", maksud saya persis bahwa: keduanya akan berjalan secara bersamaan (tergantung pada manajemen pekerjaan, penanganan sinyal, dan / atau prioritas kernel).
DopeGhoti