Bagaimana cara menjalankan beberapa program di latar belakang dengan perintah tunggal?

36

Bagaimana cara menjalankan beberapa program di latar belakang dengan perintah tunggal?

Saya sudah mencoba perintah di bawah ini, tetapi tidak berhasil.

nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'

nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'
Rahul Patil
sumber
apa itu "perintah" tunggal? Garis bash?
Oluf Lorenzen
1
stackoverflow.com/questions/14612371/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Saya mungkin kehilangan sesuatu yang jelas, tetapi && menyiratkan mengetahui kode keluar dari perintah sebelumnya. Jika Anda latar belakang itu, kode keluar tidak akan diketahui. Apa kebutuhan fungsional di sana?
Richlv

Jawaban:

32

Dari sudut pandang sintaksis shell, &pisahkan perintah seperti ;/ |/ &&... (walaupun tentu saja dengan semantik yang berbeda). Jadi itu hanya:

cmd1 & cmd2 & cmd3 &
Stéphane Chazelas
sumber
1
ini bukan / cukup / benar, ;memulai perintah berikutnya segera setelah yang pertama berakhir. &sebenarnya menempatkan perintah ke latar belakang. coba saja ini:echo foo & echo bar & echo test &
Oluf Lorenzen
1
@Inkink, tentu saja. Tidak ada yang meragukan itu. Saya hanya berarti mereka berdua memisahkan perintah (dari sudut pandang sintaksis) tanpa implikasi pada bagaimana mereka dijalankan.
Stéphane Chazelas
Itu tidak cukup apa yang ditanyakan, karena pertanyaan yang ditentukan mengeluarkan "perintah tunggal". Tidak juga jawaban saya, karena juga merupakan serangkaian perintah, tetapi memiliki setidaknya satu semantik dari satu perintah dalam output yang digabungkan, dapat diarahkan, dll.
Eli Heady
"Beberapa perintah dengan satu perintah" tampaknya merupakan sebuah oxymoron, namun - apa artinya itu? Jika ini untuk sesuatu seperti sudosehingga Anda bisa memasukkan kata sandi hanya sekali, bungkus kemudian bash -catau serupa.
Richlv
12

Bagian bash manpage berjudul Compound Commands memiliki dua opsi yang akan berfungsi, daftar dan perintah grup.

Perintah grup adalah serangkaian perintah yang disertakan dalam kurung kurawal {}. Daftarnya sama, terlampir dalam tanda kurung (). Keduanya dapat digunakan untuk latar belakang beberapa perintah di dalam, dan akhirnya untuk latar belakang seluruh koleksi sebagai satu set. Daftar konstruksi mengeksekusi perintah dalam subkulit, sehingga tugas variabel tidak dipertahankan.

Untuk menjalankan sekelompok perintah:

{ command1 & command2 & } &

Anda juga dapat menjalankan perintah dalam daftar (subkulit):

( command1 & command2 ) &
Eli Heady
sumber
1
Sama-sama. Saya menambahkan tautan ke manual. Perhatikan bahwa ()sintaksis daftar menjalankan perintah terlampir dalam sebuah subkulit, sehingga variabel tidak disimpan dalam.
Eli Heady
3

cara lain:

$(command1 &) && command2 & 
Teluk Persia
sumber
Tidak, itu akan menjalankan perintah pertama kemudian setelah selesai dulu maka akan menjalankan perintah lain
Rahul Patil
Anda menggunakan &&dalam pertanyaan Anda, itu berarti pada awalnya menjalankan perintah kemudian jika menjalankan berhasil, jalankan perintah berikutnya. Jika Anda tidak mempertimbangkannya, Anda dapat menjalankancommand1 & ; command2 & ;
PersianGulf
perintah pertama berhasil dijalankan dalam bg, atau dijalankan ;tanpa menggunakan masalah itu
Rahul Patil