Bagaimana cara menyembunyikan informasi proses shell saat memulai proses latar belakang?

19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

Bagaimana saya / dev / null dua pesan ini ?:

[1] 5232
[1]+  Done                    sleep 3

ps: jadi saya perlu output dari proses, tetapi bukan dua baris yang disebutkan!

LanceBaynes
sumber
Anda hanya mendapatkan garis-garis itu ketika Anda menjalankannya secara interaktif. Anda tidak melakukannya jika Anda menjalankannya dari skrip, misalnya.
derobert

Jawaban:

24

Ini bukan keluaran program, ini beberapa informasi shell yang berguna.

Bagaimanapun, itu bisa disembunyikan dengan menggunakan subshell dan redirection output

( sleep 3 & ) > /dev/null 2>&1
ДМИТРИЙ МАЛИКОВ
sumber
2
"2> / dev / null" adalah hal yang baik, saya perlu output dari proses
LanceBaynes
@ LanceBaynes Proses ini juga bisa menulis sesuatu di stderr.
Chris Down
2
Sangat disayangkan bahwa ini mengalahkan pengambilan pid dengan $!
Deleplace
3

Dalam bash atau zsh, Anda dapat menelepon disown %1untuk memberi tahu shell untuk melupakan pekerjaan itu. Maka shell tidak akan mencetak pesan apa pun tentang pekerjaan itu, juga tidak akan menampilkannya saat Anda menjalankan jobsatau mengirim SIGHUP ke sana. Di zsh, memulai pekerjaan dengan &!bukannya &sama dengan memanggilnya disownsegera.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

Tidak dapat mengomentari (belum) di @Gilles tetapi tampaknya itu & disownjuga berfungsi di bash:

sleep 3 & disown
dubberx
sumber
Ini sepertinya tidak berhasil di Bash v.4.1.2
Alexej Magura
1

Mencoba:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

Dan Anda telah menyembunyikan output dan PID . Perhatikan bahwa Anda masih dapat mengambil PID dari $ REPLY

mark_infinite
sumber