我的印象(可能是错误的)Perl中的'exec'函数没有返回值(我得到它只是运行命令的印象)。情况是Perl脚本在服务器上运行,我需要调用此脚本在Linux机器内运行命令,但返回结果。怎么办呢?
答案 0 :(得分:6)
如果通过“返回结果”表示返回命令的STDOUT,则需要的是反引号或qx()
。 E.g:
my $result = qx(echo foo);
# or
my $result2 = `echo foo`;
请注意,不会返回发往STDERR的消息。
如果您的意思是程序的退出状态,请使用system:
my $status = system("echo foo");
# or
my $status2 = system("/bin/echo", "foo", "bar");
答案 1 :(得分:3)
exec()不仅没有返回值,也不会返回 。
perldoc -f exec
exec函数执行系统命令,永不返回 如果你想让它返回,请使用system而不是exec。
但我很确定你不想要system()的返回值, 你似乎想要命令的输出,所以:
perldoc -f system
这不是您想要捕获的内容 一个命令的输出,你应该只使用反引号或 qx //,如perlop /“
STRING
”中所述。
答案 2 :(得分:2)
运行程序并保存结果的常用perl方法是backticks:
my $foo = `ls`;
答案 3 :(得分:2)
来自文档:http://perldoc.perl.org/functions/system.html
我通常使用这个:
if(system(@args) != 0)
{
if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
printf "child exited with value %d\n", $? >> 8;
}
}
答案 4 :(得分:1)
my $dir = `pwd`;
my $dir = qx/pwd/;
my $rc = system('pwd');
my $output = `cmd 2>&1`;
请参阅链接以了解捕获其中一个输出流的其他方法,而不是其他方法
答案 5 :(得分:0)
使用back-tic
my $var = `shell command`;
perl中的允许你执行shell命令,它返回输出的内容。