【发布时间】:2016-05-06 11:48:49
【问题描述】:
我在使用从 cron 调用的 Perl 脚本时遇到了一些困难。
脚本的参数之一是 GPG 密码。稍后将其插入到发送到 shell 的字符串中。
此特定密码包含一个左括号,脚本失败并出现“意外标记附近的语法错误”错误。
这是该短语的冒犯部分:
m3(ÃÝ4úŤ;:q!
在脚本中使用该值之前,我尝试过单引号和双引号,但这没有效果。
当直接从 shell 调用 GPG 时,该短语可以正常工作,但当它被插入以下内容时却不能正常工作:
`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`;
其中 $gpgpp 是密码变量。
转义这个以及其他可能有问题的字符的正确方法是什么?
【问题讨论】:
-
顺便说一句,反引号用于捕获 shell 命令的输出。如果您不想要该输出而只想运行该命令,则应改用
system()。 -
永远不要在多用户机器上这样做——所有其他用户都可以看到你传递给进程的参数。请改用
--passphrase-file或--passphrase-fd。 -
@JensErat 这不是多用户机器。不过,谢谢你的建议。