¿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!


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

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.


1

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

sleep 3 & disown

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.