使用 snmpstatus 命令時,將包括“超時:...”的任何終端輸出重定向到變量

使用 snmpstatus 命令時,將包括“超時:...”的任何終端輸出重定向到變量

我正在最新的 arch linux 上運行 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 snmpcmdman 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必須寫,但在我的閱讀中,我無法確定原因。

這個堆疊溢位回答非常有幫助,也是如此這個關於重定向的頁面寫得很好

相關內容