Postcat不在Perl中工作,但在CLI上工作

时间:2014-03-30 15:24:17

标签: perl

我在Perl脚本中的错误:

" MailID:D3B921090 postcat:致命:打开D3B921090:没有这样的文件或目录"

"主题:"

CLI上的此命令完美无缺: " root @ mail:/ var / spool / postfix / deferred#postcat D3B921090 | egrep" ^ Subject"

"主题:测试"

当我把它放在我的Perl脚本中时会出现问题。我在这里看不到任何错误,因为它甚至显示文件MailID,但错误表明它不存在?

                   my $num = 0;
                   opendir my $dh, '/var/spool/postfix/deferred/' or die "Can't open directory: $!\n";
                    while ( my $node = readdir($dh) )
                    {
                            next if $node =~ /^\./;
                            print "MailID: $node\n";
                            my $subject = `postcat $node|egrep "^Subject"`;#Line of error
                            print "Subject: $subject\n";
                            $num++;
                    }
                    print "\nTotal: $num\n\n";

1 个答案:

答案 0 :(得分:1)

在CLI中,您位于/ var / spool / postfix / deferred目录中,并将postcat与此目录中的文件一起使用。在perl脚本中,您可能不在此目录中,但仍然只使用postcat的文件名,而不提供完整路径(readdir给出没有路径的名称)。

尝试使用/var/spool/postfix/deferred/$node代替$node

顺便说一句,如果有人把一个名为";rm -rf /"的文件放入你搞砸的目录中,因为生成的命令将是"postcat; rm -rf / | .... " - 不好笑(命令注入)。