为什么net-snmp在这个OID上没有这个对象在这个OID上可用“后退出0 ,并将错误消息打印到STDOUT而其他错误打印到STDERR并且退出状态1 ? 比较:
$ /usr/bin/snmpget -Oqv -v2c -cpublic localhost .1.3.6.1.2.1.2.1.0 2> /dev/null No Such Object available on this agent at this OID $ echo $? 0
但是,错误的社区string或IP地址的处理方式不同(例如“publi”而不是“public”):
$ /usr/bin/snmpget -Oqv -v2c -cpubli localhost .1.3.6.1.2.1.2.1.0 2>&1 > /dev/null Timeout: No Response from localhost. $ echo $? 1
这真是让人恼火,因为我试图编写一个function来进行一些理智的检查,以确保某些MIBs / OID确实可以在代理上查询。 我想能够做到这一点(在bash脚本中):
snmp_sanity_checks() { ... if ! err=$($snmpcmd); then echo "ERROR: $err" exit $UNKNOWN fi ... }
有谁知道这个原因,我怎么能“修复”它?
谢谢
作为另一种解决方法,您可以这样做:
snmp_sanity_checks() { ... if ! err=$($snmpcmd); then echo "ERROR: $err" exit $UNKNOWN elif [[ $err == 'No Such Object'* ]]; then echo "ERROR: $err" exit $UNKNOWN fi ... }
或者,如果你想以相同的方式处理这两种情况,那么这也是可行的:
snmp_sanity_checks() { ... if ! err=$($snmpcmd) || [[ $err == 'No Such Object'* ]]; then echo "ERROR: $err" exit $UNKNOWN fi ... }