¿Cómo ocultar la información del proceso de shell al iniciar el proceso en segundo plano?

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

¿Cómo / dev / anulo estos dos mensajes ?:

[1] 5232
[1]+  Done                    sleep 3

ps: así que necesito la salida del proceso, ¡pero no las dos líneas mencionadas!

LanceBaynes
fuente
Solo obtienes esas líneas cuando lo ejecutas de forma interactiva. No lo hace si lo ejecuta desde un script, por ejemplo.
derobert

Respuestas:

24

No es la salida del programa, es información útil de shell.

De todos modos, se pueden ocultar usando subshell y redirección de salida

( sleep 3 & ) > /dev/null 2>&1
ДМИТРИЙ МАЛИКОВ
fuente
2
"2> / dev / null" es lo bueno, necesito la salida del proceso
LanceBaynes
@LanceBaynes El proceso también podría escribir algo en stderr.
Chris Down
2
¡Es lamentable que esto derrote la recuperación de pid con $!
Deleplace
3

En bash o zsh, puede llamar disown %1para decirle al shell que se olvide del trabajo. Luego, el shell no imprimirá ningún mensaje sobre ese trabajo, ni lo mostrará cuando lo ejecute jobso le envíe un SIGHUP. En zsh, comenzar el trabajo con en &!lugar de &equivale a invocarlo disownde inmediato.

Gilles 'SO- deja de ser malvado'
fuente
1

No puedo comentar (todavía) sobre @Gilles pero parece que & disowntambién funciona en bash:

sleep 3 & disown
dubberx
fuente
Esto no parece funcionar en Bash v.4.1.2
Alexej Magura el
1

Tratar:

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

Y ha ocultado tanto la salida como el PID . Tenga en cuenta que aún puede recuperar el PID de $ REPLY

mark_infinite
fuente