Si ejecuto un comando en segundo plano con &
, como este:
sleep 2 &
cuando termina el comando, me aparece "Listo". ¿Cómo puedo evitar ver el mensaje "Listo"?
Si ejecuto un comando en segundo plano con &
, como este:
sleep 2 &
cuando termina el comando, me aparece "Listo". ¿Cómo puedo evitar ver el mensaje "Listo"?
Respuestas:
Ejecute el shell incorporado:
$ set +m
Esto funciona desactivando el "modo monitor" para que el shell no informe la finalización de trabajos en segundo plano.
Aunque ejecuta el comando en una subshell como:
$ (sleep 2&)
... también deshabilitará el mensaje, la única razón por la que funciona es porque el modo monitor está habilitado de manera predeterminada solo para shells interactivos. Es decir, el subshell evita el mensaje ejecutando un shell adicional que tiene un "set + m" automático .
Me gustaría aclarar las dos respuestas anteriores. Si lo que quiere es nunca ver el mensaje Listo de ningún comando en su shell, ese set +m
es el camino a seguir. Simplemente póngalo en su .profile y / o .bashrc y listo. Sin embargo, tenga en cuenta que si escribe esto:
set +m
sleep 2 &
set -m
y el sueño termina después de la final set -m
, aún recibirá el mensaje hecho.
Si desea deshabilitar el mensaje para una invocación de comando único, la técnica de subshell (sleep 2 &)
es el camino a seguir.
Con toda honestidad, solo lo sabía set +m
, así que +1 a Wooble por iluminarme. Sin embargo, vale la pena señalar que cuál de las dos soluciones que desea depende de lo que está tratando de hacer.
Sin una subshell , puede hacer lo siguiente:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
Basado en esta respuesta .
jobs
no mostrará nada).