Як приховати інформацію про оболонку при запуску фонового процесу?


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

Як я / dev / null ці два повідомлення ?:

[1] 5232
[1]+  Done                    sleep 3

ps: тому мені потрібен вихід процесу, але не згадані два рядки!


Ці рядки ви отримуєте лише тоді, коли запускаєте їх інтерактивно. Ви, наприклад, не працюєте зі сценарієм.
дероберт

Відповіді:


24

Це не вихід програми, це корисна інформація оболонки.

У будь-якому випадку, їх можна приховати, використовуючи підзарядку та перенаправлення виводу

( sleep 3 & ) > /dev/null 2>&1

2
"2> / dev / null" - це гарна річ, мені потрібен вихід із процесу
LanceBaynes

@LanceBaynes Процес також може щось написати на stderr.
Кріс Даун

2
Прикро, що це перемагає пошук pid з $!
Деломас

3

В bash або zsh ви можете зателефонувати, disown %1щоб сказати оболонці забути про роботу. Тоді оболонка не буде надрукувати жодне повідомлення про цю роботу, а також не відображатиметься, коли ви запустите jobsабо коли-небудь надішлете їй SIGHUP. У zsh, почати роботу з &!замість цього &рівносильно негайно викликати disownїї.



1

Спробуйте:

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

І ви приховали і вихід, і PID . Зауважте, що ви все одно можете отримати PID з $ REPLY

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.