Perl сценарий использования gpg против CLI gpg?
Как часть сценария 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
Однако, если я запускаю указанную выше команду прямо из оболочки (csh), заменяя $filename реальным файлом, она работает отлично. Мы используем gpg 2.0.9.
У кого-нибудь есть идея, почему дешифрование не выполняется при вызове из сценария perl, а не из оболочки?
1 ответ
Perl не интерполирует переменные в строках с одинарными кавычками. Попробуйте использовать строку с двойными кавычками:
my $cmd = "cat ~/.gpgkey | gpg --passphrase-fd 0 --no-tty --batch --quiet
--no-mdc-warning --decrypt $filename >> ~/SAT.SCR";
system($cmd);
Для получения дополнительной информации см. Цитата и операторы, подобные цитате в perlop.