我在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";
答案 0 :(得分:1)
在CLI中,您位于/ var / spool / postfix / deferred目录中,并将postcat与此目录中的文件一起使用。在perl脚本中,您可能不在此目录中,但仍然只使用postcat的文件名,而不提供完整路径(readdir给出没有路径的名称)。
尝试使用/var/spool/postfix/deferred/$node
代替$node
。
顺便说一句,如果有人把一个名为";rm -rf /"
的文件放入你搞砸的目录中,因为生成的命令将是"postcat; rm -rf / | .... "
- 不好笑(命令注入)。