Suponha que tenhamos apenas 1 parâmetro
host $1
Como posso verificar se o comando acima me dará uma resposta ou:
Host $1 not found (NXDOMAIN)
e em vez de mostrar um erro não encontrado, gostaria de mostrar apenas um-
Responder1
host
sairá de 1 se não conseguir resolver sua entrada, então você pode usar uma construção if:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
Estamos usando !
para testar se o comando falha (já que presumo que você deseja apenas imprimir a saída normalmente se ela passar). host
envia o not found
erro para stdout em vez de stderr, portanto não podemos simplesmente ocultar o stdout. É por isso que estou canalizando o comando host grep -v 'not found'
para ocultar o erro não encontrado, se ele existir, e ainda sair de 1, fazendo com que a construção if seja impressa -
. Se não encontrar, not found
sairá 0.
Responder2
O status de saída seria suficiente? Você pode incorporar o $?
status de saída do último comando, mesmo que tenha silenciado a saída. Para host
o status de saída, 0 é sucesso e 1 é erro
[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