0

我正在研究 NSCA,以将来自远程机器和应用程序的被动警报和检查与 Nagios 集成。在互联网上,我找到了可以帮助执行它的批处理文件代码的一部分。但是我不明白最后一行管道的使用。我知道管道是如何工作的,但我看不到输出 echo %1;%2;%3;"%4" 将如何用作值的输入 %NSCA_BIN% -H %NSCA_SERVER% -p 5667 -to 10 -c %NSCA_CFG% -d ; .

set NSCA_HOME="D:\Nagios\BIN\GATEWAY"
set NSCA_BIN=%NSCA_HOME%\send_nsca.exe
set NSCA_CFG=%NSCA_HOME%\send_nsca.cfg
set NSCA_SERVER="192.168.10.110"

echo %1;%2;%3;"%4" | %NSCA_BIN% -H %NSCA_SERVER% -p 5667 -to 10 -c %NSCA_CFG% -d ;

您能否为我阐明这一点(关于使用此管道的含义)?提前致谢

4

2 回答 2

0

变量%1%2%3%4是在命令行上提供给脚本的前四个以空格分隔的参数。

管道之后的部分计算为:

D:\Nagios\BIN\GATEWAY\send_nsca.exe -H 192.168.10.110 -p 5667 -to 10 -c D:\Nagios\BIN\GATEWAY\send_nsca.cfg -d ;

send_nsca的文档说它从标准输入中获取数据,包括 Nagios 服务主机、Nagios 服务描述、状态号和插件输出,这些数据由制表符或-d开关指定的分隔符分隔。上面的命令将分隔符设置为;.

管道之前的部分,echo %1;%2;%3;"%4",接受四个命令行参数,用冒号分隔它们,引用最后一个,并将它们作为输入提供给send_nsca。这意味着你会这样调用脚本:

scriptname.bat NagiosServiceHost NagiosServiceDescription StatusNumber PluginOutput

该脚本的目的似乎是为您省去必须输入send_nsca的路径和所有命令行参数的麻烦,并且只需提供输入,这在您多次使用此命令时很有用。


不过,在我看来,批处理文件的写入方式存在错误。我在文档中看到的任何内容都没有指定需要引用输入(插件输出)的第四个字段,所以我认为引用%4背后的想法是允许在命令行上指定的插件输出包含空格。但是,这不起作用,因为批处理文件将命令行中以空格分隔的标记分配给%#变量,因此%4将只包含第四个标记,并且后面的空格后面的所有内容都将被忽略。

我认为应该去掉引号,如果您需要提供带空格的参数,请在调用批处理文件时在命令行上引用它,如下所示:

scriptname.bat NagiosServiceHost NagiosServiceDescription StatusNumber "Plugin Output With Spaces"

这会将%4设置为"Plugin Output With Spaces"(是的,引号包含在变量的值中——这就是你想要的)。

于 2013-09-16T23:58:50.517 回答
0

在这种情况下,它看起来像是D:\Nagios\BIN\GATEWAY\send_nsca.exe从命令行运行时接受用户的输入。此脚本使用 %1 - %4 中的值作为输入,就好像用户已键入它一样。

于 2013-09-16T23:45:50.230 回答