Ваш синтаксис ошибочен, так как вы не можете просто сравнить стандартную ошибку какой-либо ранее выполненной команды с ==
.
Одно из предложений состоит в том, чтобы сохранить поток ошибок в файл, а затем проанализировать его:
#!/bin/bash
if ! my-bin-file-i-run 2>error.log; then
if ! grep -q -F 'name_to_handle_at' error.log; then
echo 'some error message' >&2
exit 1
fi
fi
Это запустит команду и перенаправит стандартный поток ошибок в файл с именем error.log
. Если команда завершается с ошибкой, grep
используется для поиска строки name_to_handle_at
в файле журнала. Если это не может быть найдено, печатается сообщение об ошибке, и сценарий завершается с нулевым статусом выхода, отличным от -.
В любом другом случае сценарий завершается с нулевым статусом выхода.
Если вы хотите, чтобы файл error.log
удалялся при завершении работы вашего скрипта, вы можете сделать это явно с помощью rm error.log
в соответствующих местах,или с ловушкой EXIT
:
#!/bin/bash
trap 'rm -f error.log' EXIT
if ! my-bin-file-i-run 2>error.log; then
if ! grep -q -F 'name_to_handle_at' error.log; then
echo 'some error message' >&2
exit 1
fi
fi
Я полагаю, вы ищете Протокол обнаружения канального уровня , используя команду lldpd
и соответствующий набор инструментов . Вероятно, он не будет так полезен на потребительском оборудовании, но, насколько я могу представить, это протокол, который позволяет устройству запрашивать у сетевого устройства имя.
Я полагаю, что для потребительских устройств вы можете просто подключиться к порту 80 или 443 на шлюзе и посмотреть, есть ли там что-нибудь.