Предположим, у нас есть только 1 параметр.
host $1
Как я могу проверить, даст ли мне указанная выше команда ответ или:
Host $1 not found (NXDOMAIN)
и вместо того, чтобы показывать сообщение об ошибке «Ошибка не найдена», я хотел бы показать просто-
решение1
host
выполнит выход 1, если не сможет разрешить ваши входные данные, поэтому вы можете использовать конструкцию if:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
Мы используем !
для проверки, не срабатывает ли команда (так как я предполагаю, что вы просто хотите вывести вывод как обычно, если он проходит). host
отправляет not found
ошибку в stdout вместо stderr, поэтому мы не можем просто скрыть stdout. Вот почему я передаю команду host в grep -v 'not found'
это, это скроет ошибку not found, если она существует, и все равно выйдет 1, заставляя конструкцию if вывести -
. Если она не найдена, not found
то выйдет 0.
решение2
Будет ли достаточным статус выхода? Вы можете включить $?
, статус выхода последней команды, даже если вы отключили вывод. Для host
статуса выхода 0 означает успех, а 1 — ошибку
[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