2016-05-06 3 views
2

У меня возникли трудности с скриптом Perl, который вызывается из cron.Экранирование скобок при отправке кодовой фразы GPG в Perl-скрипт

Одним из аргументов для сценария является кодовая фраза GPG. Это позже интерполируется в строку, которая отправляется в оболочку.

Эта конкретная кодовая фраза содержит открытые круглые скобки, и сценарий завершается с «ошибкой синтаксиса около неожиданной лексемы` (»ошибка

Это обижая часть фразы:.

m3(ÃÝ4úŤ;:q! 

I попробовали однократное и двойное цитирование, прежде чем значение будет использовано в скрипте, но это не влияет.

Фраза работает корректно при вызове GPG непосредственно из оболочки, только когда она получает интерполяцию в следующее:

`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`; 

Где $ gpgpp - это переменная passphrase.

Каков правильный способ избежать этого и другие потенциально проблематичные символы?

+0

кстати, обратно-клещи используются для захвата вывода команды оболочки. Если вы не хотите этого вывода и хотите просто запустить команду, вы должны использовать 'system()' вместо этого. –

+0

Никогда не делайте этого на многопользовательской машине - все остальные пользователи могут видеть, какие параметры вы передали процессу. Вместо этого используйте '--passphrase-file' или' --passphrase-fd'. –

+0

@JensErat это не многопользовательская машина. Благодарю вас за это предложение. –

ответ

3

Управляющие последовательности и \E используются для удаления всех специальных символов между ними.

`gpg --passphrase \Q$gpgpp\E --batch -o $gpgofile -d $file`; 

Это должно быть сделано в любое время, когда у вас есть переменная, которая может содержать символы, которые необходимо экранировать.

http://perldoc.perl.org/functions/quotemeta.html

+1

Отмечено как ответ. Спасибо, поддерживая существующий скрипт, и мой опыт Perl ограничен - я не знал об этих последовательностях! –

1

Заключайте переменные в кавычках:

gpg --passphrase "$gpgpp" --batch -o "$gpgofile" -d "$file" 

В противном случае, оболочка будет пытаться интерпретировать содержимое переменные как выражения.

Смежные вопросы