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?

Jawaban:


56

Bungkus dalam sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

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

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.


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 &

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
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.