将GPG密码短语发送到Perl脚本时转义括号

时间:2016-05-06 11:48:49

标签: perl shell gnupg

我在使用从cron调用的Perl脚本时遇到了一些困难。

该脚本的一个参数是GPG密码。稍后将其插入到发送到shell的字符串中。

此特定密码包含一个打开的括号,并且脚本失败并出现“意外令牌附近的语法错误”(“错误。

这是短语中令人讨厌的部分:

m3(ÃÝ4úŤ;:q!

在脚本中使用该值之前,我尝试过单引号和双引号,但这没有效果。

当直接从shell调用GPG时,该短语可以正常工作,而不是当它被插入到以下内容中时:

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

其中$ gpgpp是密码短语变量。

逃避这个以及其他可能存在问题的角色的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

\Q\E转义序列用于逃避所有"特殊"他们之间的人物。

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

只要您的变量可能包含需要转义的字符,就应该这样做。

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

答案 1 :(得分:1)

将变量括在引号中:

Resave "myfile.xlsm"

Sub Resave(filename)
    Set objExcel = CreateObject("Excel.Application")

    currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName)))

    objExcel.Application.AutomationSecurity = 3 ' Disable to avoid crash
    objExcel.Application.enableevents = False
    objExcel.Application.Workbooks.open(currentDirectory + "\" + filename)
    objExcel.Application.Visible = True

    objExcel.Application.DisplayAlerts = False
    Set objSheet = objExcel.ActiveWorkbook.Sheets.Add
    objSheet.Delete
    objExcel.Application.DisplayAlerts = True

    objExcel.Application.enableevents = True
    objExcel.ActiveWorkbook.Save
    objExcel.ActiveWorkbook.Close

    objExcel.Application.Quit 

    Set objExcel = Nothing
End Sub

否则,shell将尝试将变量的内容解释为表达式。