Supongamos que solo tenemos 1 parámetro
host $1
¿Cómo puedo comprobar si el comando anterior me dará una respuesta o:
Host $1 not found (NXDOMAIN)
y en lugar de mostrar un error no encontrado, me gustaría mostrar solo un-
Respuesta1
host
saldrá de 1 si no puede resolver su entrada para que pueda usar una construcción if:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
Lo estamos usando !
para probar si el comando falla (ya que supongo que simplemente desea imprimir el resultado normalmente si se aprueba). host
envía el not found
error a stdout en lugar de stderr, por lo que no podemos simplemente ocultar stdout. Es por eso que estoy canalizando el comando host grep -v 'not found'
para ocultar el error no encontrado si existe y aún así salir 1, lo que hace que se imprima la construcción if -
. Si no lo encuentra not found
saldrá 0.
Respuesta2
¿Sería suficiente el estatus de salida? Puede incorporar el $?
estado de salida del último comando, incluso si silenció la salida. Para host
el estado de salida, 0 es éxito y 1 es error.
[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0