При использовании команды snmpstatus перенаправьте любой вывод терминала, включая «Timeout: ...», в переменную

При использовании команды snmpstatus перенаправьте любой вывод терминала, включая «Timeout: ...», в переменную

Я использую bash 5.0.007-1 и net-snmp 5.8-2 на последней версии Arch Linux.

Эта строка собирает информацию о состоянии устройства:

snmpstatus -c public -v1 192.168.1.240

Если устройство не включено, т.е. указанный выше IP-адрес не существует в сети, указанная выше команда возвращает на терминал следующий вывод:

Timeout: No Response from 192.168.1.240

Как мне остановить отображение этой строки тайм-аута в терминале и вместо этого захватить ее в переменную. Также, если устройство включено и IP-адрес существует, нормальный вывод должен отображаться на терминале, а также передавать вывод в ту же переменную.

Получив переменную, я проанализирую ее и решу, что делать дальше, в зависимости от ее содержимого.

(Я прочитал довольно много информации man snmpcmd, включая man smnpwalkинформацию о перенаправлении, но решение ускользает от меня).

решение1

Я разобрался. В целом проблема, с которой я столкнулся, была в том, что я сделал перенаправление после того, как передал вывод команды

snmpstatus -c public -v1 192.168.1.240

grep, а затем sed, в конце довольно длинной однострочной строки. В то время я не осознавал, хотя сейчас это совершенно очевидно, что перенаправление любого stderr или stdout должно происходить сразу после соответствующей команды. Это важно, потому что я фактически нашел решение и отбросил его как странным образом не работающее, потому что я пытался перенаправить в конце конвейера.

Вот как перенаправить stderr в переменную

error=$(snmpstatus -c public -v1 192.168.1.240 2>&1)
echo $error

Вот объяснение синтаксиса 0 = stdin 1 = stdout 2 = stderr > = redirect

Поэтому 2>1 означает перенаправление stderr в stdout. & необходим, поэтому 2>&1должен быть написан, но в моем чтении я не смог установить, почему.

Это Stackoverflowотвечатьбыло очень полезно, и такжеэта очень хорошо написанная страница о перенаправлении.

Связанный контент