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 ';'

apa itu "perintah" tunggal? Garis bash?
Oluf Lorenzen


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 &

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 ) &

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 & 

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.