将 GPG 密码短语发送到 Perl 脚本时转义括号
Escaping parentheses when sending GPG passphrase to a Perl script
我在使用从 cron 调用的 Perl 脚本时遇到一些困难。
脚本的参数之一是 GPG 密码。稍后将其插入到发送到 shell.
的字符串中
此特定密码包含一个左括号,脚本失败并出现 "syntax error near unexpected token `(" 错误。
这是该短语的冒犯部分:
m3(ÃÝ4úŤ;:q!
在脚本中使用该值之前,我曾尝试对其进行单引号和双引号,但这没有效果。
当直接从 shell 调用 GPG 时,该短语工作正常,只是当它被插入到以下内容中时:
`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`;
其中 $gpgpp 是密码变量。
转义这个字符和其他可能有问题的字符的正确方法是什么?
用引号括起变量:
gpg --passphrase "$gpgpp" --batch -o "$gpgofile" -d "$file"
否则,shell 将尝试将变量的内容解释为表达式。
\Q
和 \E
转义序列用于转义它们之间的所有 "special" 个字符。
`gpg --passphrase \Q$gpgpp\E --batch -o $gpgofile -d $file`;
只要您有一个可能包含需要转义的字符的变量,就应该这样做。
我在使用从 cron 调用的 Perl 脚本时遇到一些困难。
脚本的参数之一是 GPG 密码。稍后将其插入到发送到 shell.
的字符串中此特定密码包含一个左括号,脚本失败并出现 "syntax error near unexpected token `(" 错误。
这是该短语的冒犯部分:
m3(ÃÝ4úŤ;:q!
在脚本中使用该值之前,我曾尝试对其进行单引号和双引号,但这没有效果。
当直接从 shell 调用 GPG 时,该短语工作正常,只是当它被插入到以下内容中时:
`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`;
其中 $gpgpp 是密码变量。
转义这个字符和其他可能有问题的字符的正确方法是什么?
用引号括起变量:
gpg --passphrase "$gpgpp" --batch -o "$gpgofile" -d "$file"
否则,shell 将尝试将变量的内容解释为表达式。
\Q
和 \E
转义序列用于转义它们之间的所有 "special" 个字符。
`gpg --passphrase \Q$gpgpp\E --batch -o $gpgofile -d $file`;
只要您有一个可能包含需要转义的字符的变量,就应该这样做。