Pertanyaan Cara menjalankan skrip shell di latar belakang dan tidak mendapatkan output


Saya menulis dua skrip shell a.sh dan b.sh. Dalam a.sh dan b.sh saya memiliki loop yang tak terbatas dan mereka mencetak beberapa output ke terminal. Saya ingin menulis skrip lain yang memanggil a.sh dan b.sh tetapi saya ingin pengguna untuk segera mendapatkan kembali kendali terminal, daripada menjalankan skrip tanpa batas dan saya ingin menyembunyikan output di terminal.


75
2018-02-08 08:53


asal


Jawaban:


Menggunakan nohup jika pekerjaan latar belakang Anda membutuhkan waktu lama untuk selesai atau Anda hanya menggunakan SecureCRT atau sesuatu seperti itu masuk ke server.

Alihkan stdout dan stderr untuk /dev/null untuk mengabaikan output.

nohup /path/to/your/script.sh > /dev/null 2>&1 &

160
2018-02-08 08:58



Alihkan output ke file seperti ini:

./a.sh > somefile 2>&1 &

Ini akan mengarahkan kedua stdout dan stderr ke file yang sama. Jika Anda ingin mengarahkan ulang stdout dan stderr ke dua file yang berbeda, gunakan ini:

./a.sh > stdoutfile 2> stderrfile &

Kamu dapat memakai /dev/null sebagai salah satu atau kedua file jika Anda tidak peduli dengan stdout dan / atau stderr.

Lihat bash manpage untuk detail tentang pengalihan.


24
2018-02-08 08:56



Maaf, ini agak terlambat tetapi menemukan solusi ideal untuk perintah somple di mana Anda tidak ingin ada output standar atau kesalahan (kredit di mana itu karena: http://felixmilea.com/2014/12/running-bash-commands-background-properly/)

Ini mengalihkan output ke null dan menjaga layar tetap bersih:

command &>/dev/null &

15
2018-04-09 19:57



Jika mereka berada di direktori yang sama dengan skrip Anda yang berisi:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

Itu & pada akhirnya adalah apa yang membuat skrip Anda berjalan di latar belakang.

Itu > /dev/null 2>&1 bagian tidak diperlukan - itu redirects stdout dan stderr streams sehingga Anda tidak perlu melihat mereka di terminal, yang mungkin Anda ingin lakukan untuk skrip berisik dengan banyak output.


11
2018-02-08 08:55



Jalankan dalam subkunci untuk menghapus notifikasi dan menutup STDOUT dan STDERR:

(&>/dev/null script.sh &)

1
2018-06-27 11:16



nohup sh -x runShellScripts.sh &

0
2018-05-10 22:22



Contoh-contoh ini berfungsi dengan baik:

nohup sh prog.sh proglog.log 2> & 1 &

Untuk loop Anda dapat menggunakan seperti ini:

untuk saya di {1..10}; lakukan prog.sh sh; tidur 1; dilakukan prog.log 2> & 1 &

Ia bekerja di latar belakang dan tidak menunjukkan output apa pun.


0
2017-07-31 10:39