像exec()之类的东西在Perl中返回一个值?

时间:2011-10-23 22:33:58

标签: linux perl exec

我的印象(可能是错误的)Perl中的'exec'函数没有返回值(我得到它只是运行命令的印象)。情况是Perl脚本在服务器上运行,我需要调用此脚本在Linux机器内运行命令,但返回结果。怎么办呢?

6 个答案:

答案 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)

捕获STDOUT:

my $dir = `pwd`;
my $dir = qx/pwd/;

捕获返回状态:

my $rc = system('pwd');

Perldocs Capture STDERR and STDOUT

my $output = `cmd 2>&1`;

请参阅链接以了解捕获其中一个输出流的其他方法,而不是其他方法

答案 5 :(得分:0)

使用back-tic

my $var = `shell command`;
perl中的

允许你执行shell命令,它返回输出的内容。