作为perl脚本的一部分,我正在根据从电子邮件中获得的周期数从网站下载一些文件。我使用regexp来找到合适的循环号,将其附加到一个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调用时解密会失败吗?
发布于 2013-05-31 02:18:45
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。
https://stackoverflow.com/questions/16842447
复制相似问题