Perl脚本使用gpg与CLI gpg?

时间:2013-05-30 17:29:54

标签: linux perl gnupg

作为perl脚本的一部分,我将根据从电子邮件中获取的周期数从网站下载一些文件。我使用正则表达式来查找适当的循环编号,将其附加到URL并从所述URL中获取加密文件。然后我将加密文件打印到临时文件,并使用gpg解密该临时文件,将输出转储到另一个位置。像泥一样清楚?

这是事情变得有趣的地方。这是用于解密临时文件的命令:

my $cmd = 'cat ~/.gpgkey | gpg --passphrase-fd 0 --no-tty --batch --quiet 
          --no-mdc-warning --decrypt $filename >> ~/SAT.SCR';

如果您注意到,该命令使用$ filename变量。我已经单独确认此变量指向正确的文件。但是,此命令会产生以下错误:

gpg: decrypt_message failed: Unknown system error

但是,如果我直接从shell(csh)运行上面的命令,用实际文件替换$ filename,它可以很好地工作。我们正在使用gpg 2.0.9。

有没有人知道为什么解密在从perl脚本调用时失败而不是从shell调用?

1 个答案:

答案 0 :(得分:3)

Perl不会在带有单引号的字符串中插入变量。尝试使用带双引号的字符串:

my $cmd = "cat ~/.gpgkey | gpg --passphrase-fd 0 --no-tty --batch --quiet 
      --no-mdc-warning --decrypt $filename >> ~/SAT.SCR";
system($cmd);

有关详细信息,请参阅Quote and Quote-like Operators in perlop