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!


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

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.


1

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

sleep 3 & disown

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

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.