Передача пароля в качестве аргумента команде psql в NSIS
Я пытаюсь передать входной пароль для команды sql в NSIS. Если я запускаю 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 ответ
У вас есть проблема цитирования: когда вы пытаетесь поставить -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"`