Как скрыть информацию о процессе оболочки при запуске фонового процесса?


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

Это не вывод программы, это полезная информация оболочки.

В любом случае, их можно скрыть, используя subshell и перенаправление вывода

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

2
«2> / dev / null» - это хорошо, мне нужен вывод процесса
LanceBaynes

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

2
К сожалению, это побеждает получение pid с помощью $!
Deleplace

3

В bash или zsh вы можете позвонить, disown %1чтобы сказать оболочке забыть о работе. Тогда оболочка не будет печатать никаких сообщений об этом задании и не будет показывать его при запуске jobsили отправке SIGHUP. В zsh запуск задания &!вместо вместо &эквивалентен disownнемедленному вызову .


1

Не могу прокомментировать (пока) @Gilles, но похоже, что это & disownработает и в bash:

sleep 3 & disown

Похоже, что это не работает в Bash v.4.1.2
Алексей Магура

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.