Bagaimana mungkin menjalankan banyak perintah dan melatarinya menggunakan bash?
Sebagai contoh:
$ for i in {1..10}; do wait file$i &; done
di mana menunggu adalah biner khusus.
Saat ini saya mendapatkan kesalahan:
syntax error near unexpected token `;'
saat menjalankan perintah di atas.
Setelah di latar belakang, perintah harus dijalankan secara paralel.
nohup
memungkinkan Anda untuk mengeksekusi perintah di latar belakang&
dan;
keduanya "terminator perintah". Anda tidak perlu menggunakan keduanya:for ...; do wait $arg & done
akan bekerja.Jawaban:
The
&
, seperti;
adalah daftar terminator operator. Mereka memiliki sintaks yang sama dan dapat digunakan secara bergantian (tergantung pada apa yang ingin Anda lakukan). Ini berarti bahwa Anda tidak ingin, atau butuh, yangcommand1 &; command2
Anda butuhkan hanyalahcommand1 & command2
.Jadi, dalam contoh Anda, Anda bisa menulis:
dan setiap
wait
perintah akan diluncurkan di latar belakang dan loop akan segera beralih ke yang berikutnya.sumber
Demi kompatibilitas gunakan formulir posix alih-alih ekspansi:
sumber
seq
ini bukan perintah POSIX dan umumnya hanya ditemukan pada sistem GNU. Perilaku atau$(...)
(dan$i
) tergantung pada nilai saat ini dari$IFS
. Perhatikan juga bahwa dengan melakukan(cmd &)
,cmd
akan menjadi anak dari subkulit, jadi Anda tidak akan bisa menunggu dan mendapatkan status keluarnya misalnya.Anda dapat mengelompokkan perintah dan meletakkan perintah yang dikelompokkan di latar belakang. Suka :
sumber
Apakah biner Anda benar-benar bernama
wait
? Saya tidak merekomendasikan untuk melakukannya, karenawait
shell builtin.Saya percaya bash tidak menguraikan dengan baik satu baris loop yang meluncurkan proses latar belakang. Saya menyarankan Anda untuk mengubah kode ke:
sumber