Estou executando o bash 5.0.007-1 e o net-snmp 5.8-2 em um Arch Linux atualizado.
Esta linha coleta o status de um dispositivo:
snmpstatus -c public -v1 192.168.1.240
Quando o dispositivo não está ligado, ou seja, o endereço IP acima não existe na rede, o comando acima retorna a saída abaixo para o terminal:
Timeout: No Response from 192.168.1.240
Como faço para interromper a exibição dessa linha de saída de tempo limite no terminal e capturá-la em uma variável. Além disso, se o dispositivo estiver ligado e o endereço IP existir, a saída normal deverá ser exibida no terminal, bem como passar a saída para a mesma variável.
Analisarei a variável assim que a tiver e decidirei o que fazer dependendo de seu conteúdo.
(Eu li bastante man snmpcmd
, incluindo man smnpwalk
e sobre redirecionamento, mas a solução está me escapando).
Responder1
Eu descobri. Em geral, o problema que experimentei foi porque fiz o redirecionamento depois de canalizar a saída do comando
snmpstatus -c public -v1 192.168.1.240
para grep e depois sed, no final de um forro bastante longo. Eu não percebi na época, embora seja muito óbvio agora, que o redirecionamento de qualquer stderr ou stdout deve acontecer imediatamente após o comando associado. Isso é importante porque eu realmente encontrei a solução e a descartei por estranhamente não funcionar, porque tentei redirecionar no final do tubo.
Aqui está como redirecionar o stderr para uma variável
error=$(snmpstatus -c public -v1 192.168.1.240 2>&1)
echo $error
Aqui está uma explicação da sintaxe
0 = stdin
1 = stdout
2 = stderr
> = redirect
Portanto 2>1 significa redirecionar stderr para stdout. O & é essencial, portanto, 2>&1
deve ser escrito, mas na minha leitura não consegui estabelecer o porquê.
Este Stackoverflowresponderfoi muito útil, e tambémesta página muito bem escrita sobre redirecionamento.