将密码作为参数传递给NSIS中的psql命令

时间:2013-06-11 11:55:20

标签: postgresql nsis

我正在尝试将输入密码传递给NSIS中的sql命令。 如果我在命令行上运行psql,它就像:

 psql -U postgres -v V1=username -v V2="'dbpassword'" -w -f "path\file.sql"

sql文件包含以下相关命令:

CREATE USER :V1 WITH PASSWORD :V2 LOGIN NOSUPERUSER IN GROUP postgres;

如何使用变量在NSIS中执行相同的命令?我尝试了以下但是不起作用

nsExec::Exec 'psql -U postgres -v V1=$username -v V2=$dbpassword -w -f "path\file.sql"'

如果我使用"'$dbpassword'"它就不会编译。

1 个答案:

答案 0 :(得分:2)

您有引用问题:当您尝试将-v V2="'$dbpassword'"放入命令

nsExec::Exec 'psql -U postgres -v V1=$username -v V2=$dbpassword -w -f "path\file.sql"'

导致以下命令,字符串引用不匹配:

nsExec::Exec 'psql -U postgres -v V1=$username -v V2="'$dbpassword'" -w -f "path\file.sql"'
             ^                                        ^
              `- Begining of string                    `- End of string

V2之后的单引号之后,字符串被语法终止,因此以下文本对于编译器来说是垃圾。

诀窍是NSIS可以处理3个不同的字符串分隔符:单引号',双引号"和反引号`。 尝试使用反引号来避免命令中的单/双引号冲突:

nsExec::Exec `psql -U postgres -v V1=$username -v V2="'$dbpassword'" -w -f "path\file.sql"`