【发布时间】:2014-05-08 11:37:51
【问题描述】:
我是脚本语言的新手,我想问一个简单的问题。
#!/usr/bin/perl
my $process_id = shift;
execute();
sub execute() {
system("cd", "bin");
my $output = `pcp.sh -p $process_id`;
if (index($output, "some string") != -1) {
print("Information 1.0 :Standalone server works fine \n");
}
else {
print("Information 2.0 Standalone server have some problems)\n");
}
}
对于“pcp.sh”,请点击链接:
http://www.oracle.com/technetwork/systems/security/pcp-149863.txt
此脚本在终端上运行并返回
Information 1.0 Standalone server works fine
但我正在做脚本监控和监控工具获取输出作为返回值。 (这很奇怪。)在我运行脚本时在监控工具上显示
Information 2.0 Standalone server have some problems
我需要从pcp.sh 获取输出。该代码的pcp.sh -p $process_id 部分运行了大约一分钟。监控工具可能会运行五秒钟。我明白我必须等待,但我不知道如何处理这份工作。
【问题讨论】:
-
在命令完成之前,反引号不会返回。您在反引号返回后看到的任何输出都不是来自您启动的程序,而是来自它在后台启动的程序。 Perl 对此一无所知。怎么可能?连你自己都不知道。
-
你的“system()”调用有什么意义? “abs(1.0)”的意义何在?
-
系统调用只是从$home目录进入bin目录,其他的不需要我删除了。
-
请注意,
system("cd", "bin");什么都不做。它试图执行一个名为cd的程序,但没有这样的程序,所以它返回-1 并相应地设置$!。有一个名为cd的内置 shell,但如果您设法让 shell 运行它,那只会更改该 shell 的工作目录。你想要 Perl 内置chdir。