Как найти идентифицируемое сетевое имя через Ethernet?

Ваш синтаксис ошибочен, так как вы не можете просто сравнить стандартную ошибку какой-либо ранее выполненной команды с ==.

Одно из предложений состоит в том, чтобы сохранить поток ошибок в файл, а затем проанализировать его:

#!/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
0
18.09.2021, 16:49
1 ответ

Я полагаю, вы ищете Протокол обнаружения канального уровня , используя команду lldpdи соответствующий набор инструментов . Вероятно, он не будет так полезен на потребительском оборудовании, но, насколько я могу представить, это протокол, который позволяет устройству запрашивать у сетевого устройства имя.

Я полагаю, что для потребительских устройств вы можете просто подключиться к порту 80 или 443 на шлюзе и посмотреть, есть ли там что-нибудь.

0
18.09.2021, 19:35

Теги

Похожие вопросы