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.