Cara Menjalankan beberapa perintah menggunakan nohup

41

Saya perlu menjalankan beberapa perintah menggunakan nohup. Setiap perintah harus dieksekusi setelah perintah sebelumnya.

Saya menggunakan perintah ini sebagai contoh:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

Namun perintah itu tidak berhasil.

Perintah apa yang harus saya gunakan untuk tujuan ini?

Ehsan
sumber

Jawaban:

56

Bungkus dalam sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
sumber
1
ketika saya meluncurkan nohup saya mendapatkan "nohup: mengabaikan input dan mengarahkan stderr ke stdout" jadi bukankah "2> & 1" berlebihan?
harschware
1
Mungkin. Saya pikir ketika saya menulis jawaban saya hanya menyalinnya dari pertanyaan.
jw013
6

Bukankah lebih mudah untuk membuat daftar perintah Anda di file shell yang terpisah, mis. Command.sh, tanpa nohup.

Kemudian Anda menelepon:

nohup bash command.sh
assaf
sumber
4

Yang lain sudah menjawab nohup. Sebagai catatan praktis: Saya sarankan melakukan hal semacam ini dalam satu screenatau tmuxsesi. Dengan begitu Anda dapat memutuskan, kemudian menghubungkan kembali nanti dan melihat output dan hasil akhir.

Hentikan bahaya yang berkelanjutan pada Monica
sumber
1
Jawaban ini bagus untuk skenario interaktif, tetapi tidak masuk akal untuk skrip atau otomatisasi.
Jonathan Hartley
0

Akan lebih sederhana seperti ini:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

Namun ini dapat menyebabkan masalah jika URL berisi karakter khusus sehingga untuk opsi yang lebih aman Anda dapat menggunakan:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
Didi Kohen
sumber
3
Satu-satunya cara yang aman untuk melewatkan parameter ke sh -cadalah melalui argumen terpisah, yang dapat diakses melalui parameter posisi ( $0, $1, ...). Tidak ada cara mudah atau sederhana untuk mengutip argumen dengan benar untuk penguraian string. Upaya Anda untuk menggunakan tanda kutip ganda yang lolos gagal jika $urlitu sendiri berisi tanda kutip ganda. Coba a='problem"'; sh -c "echo \"$a\""sendiri dan lihat - Anda seharusnya mendapatkan kesalahan sintaksis karena sh -cmencoba menjalankannya echo "problem"".
jw013
@ jw013 Karena minat, apakah keberatan Anda berlaku sama untuk jawaban yang diterima oleh -oh. Oleh Anda. Mungkin tidak, kalau begitu. Tapi saya tidak mengerti kenapa tidak! :-)
Jonathan Hartley
1
@ Jonathanathan Hartley Saya tidak yakin saya mengerti pertanyaan Anda. Jika Anda membandingkan jawaban ini dengan jawaban saya dengan cermat, Anda akan melihat perbedaan dalam caranya $urldan $url2digunakan.
jw013
@ jw013 Ah, tentu saja. Saya bodoh. Terima kasih telah meluruskan saya.
Jonathan Hartley