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.

Другие вопросы по тегам