在手册页中,我看到以下内容:
-L LOGOPTS Toggle various defaults controlling logging:
e: log to standard error
o: log to standard output
这让我非常兴奋,因为我处于这样的境地 有利于我从STDOUT而不是从STDOUT捕获错误 STDERR。
如果我运行命令:
snmpget -v1 -ccommString -Lo 172.16.x.x .1.2.3.4.5.6.7.8.9
我回到我的终端
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: iso.2.3.4.5.6.7.8.9
但是如果我运行命令:
snmpget -v1 -ccommString -Lo 172.16.x.x .1.2.3.4.5.6.7.8.9 2> foo
我在终端没有得到回复,但文件foo包含相同的内容 我上面的错误信息。所以我收到了错误消息 STDERR,而不是我所期望的STDOUT。
我在这里看错了吗?另外我试过这个 在Linux和Windows系统上,因为我所处的情况 我宁愿在STDOUT而不是STDERR上发出错误 因为我不想用shell来平常做的工作 2 - ;&安培; 1
非常感谢任何帮助或建议。
答案 0 :(得分:1)
我相信-L选项控制代理(snmpd)如何进行日志记录,并且不适用于来自snmpget的错误消息(-L是“常见”标志之一,它可能不适用于所有net-snmp命令)。
答案 1 :(得分:0)
以下c代码是snmpget实用程序源代码的一部分(net-snmp-5.4.2.1 \ apps中的snmpget.c)。
fprintf(stderr, "Error in packet\nReason: %s\n",
snmp_errstring(response->errstat));
if (response->errindex != 0) {
fprintf(stderr, "Failed object: ");
for (count = 1, vars = response->variables;
vars && count != response->errindex;
vars = vars->next_variable, count++)
/*EMPTY*/;
if (vars) {
fprint_objid(stderr, vars->name, vars->name_length);
正如您所看到的,消息只是写入 stderr 。
您可以拥有自定义snmpget实用程序:Download源代码,将 stderr 替换为 stdout ,然后重新编译。