使用 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必须写,但在我的阅读中,我无法确定原因。

这个堆栈溢出回答非常有帮助,也是如此这个关于重定向的页面写得很好

相关内容