snmpstatus 명령을 사용할 때 "Timeout: ..."을 포함한 모든 터미널 출력을 변수로 리디렉션합니다.

snmpstatus 명령을 사용할 때 "Timeout: ..."을 포함한 모든 터미널 출력을 변수로 리디렉션합니다.

저는 최신 아치 리눅스에서 bash 5.0.007-1과 net-snmp 5.8-2를 실행하고 있습니다.

이 줄은 장치의 상태를 수집합니다.

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작성해야 하지만, 읽어보니 그 이유를 알 수 없습니다.

이 스택은 오버플로됩니다.답변매우 도움이 됩니다.리디렉션에 관한 이 페이지는 매우 잘 작성되었습니다..

관련 정보