Cuando corres:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Básicamente, solo está redirigiendo la salida de Stream 1 (es decir stdout
) a /dev/null
.
Esto está bien cuando desea redirigir la salida producida por la ejecución normal de un programa. Sin embargo, en caso de que también desee redirigir la salida causada por todos los errores, advertencias o fallas, también debe redirigir la stderr
secuencia o Error estándar a /dev/null
.
Una forma de hacerlo es anteponer el número de la secuencia que desea redirigir al operador de redirección, de >
esta manera:Command 2> /dev/null
Por lo tanto, su comando se vería así:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Pero tenga en cuenta que ya hemos redirigido una transmisión a /dev/null
. ¿Por qué no simplemente a cuestas en la misma redirección? Bash nos permite hacer esto especificando el número de transmisión al que redirigir. 2>&1
.
Observe el &
carácter después del operador de redirección. Esto le dice al shell que lo que aparece a continuación no es un nombre de archivo, sino un identificador para la secuencia de salida.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Tenga cuidado con los operadores de redireccionamiento, su orden es muy importante. Si fuera a redirigir en el orden incorrecto, obtendrá resultados inesperados.
Otra forma en la que puede lograr un silencio completo es redirigiendo todas las secuencias de salida para /dev/null
usar este acceso directo: &>/dev/null
(o redirigir a un archivo de registro con &>/path/to/file.log
).
Por lo tanto, escriba su comando como:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
lo es. ¡Gracias a todos por la ayuda instantánea!