Я пытаюсь выполнить команду postgres в сценарии bash, но я не знаю, почему она не работает.
Проблема в том, что мне нужно прочитать данные из JSON файл. Для этого я использую библиотеку jq и создаю предложение, но psql выдает только ошибки.
file. json
{
"databases": [
"db1",
"db2"
],
"logins": [
{
"username": "user1",
"password": "pwd1"
},
{
"username": "user2",
"password": "pwd2"
}
],
"rights": [
{
"username": "user1",
"database": "db1",
"grant": "ALL PRIVILEGES"
},
{
"username": "user2",
"database": "db2",
"grant": "ALL PRIVILEGES"
}
]
}
init. sh
# rights
mapfile -t arr < <(jq -M -r '.rights[] | "psql -d 'template1' -U 'postgres' -c GRANT \"" + .grant + "\" ON DATABASE \"" + .database + "\" TO \"" + .username + "\";"' $CONFIG_PATH)
for a in "${arr[@]}"; $a; done
ошибка
psql: warning: extra command-line argument ""ALL" ignored
psql: warning: extra command-line argument "PRIVILEGES"" ignored
psql: warning: extra command-line argument "ON" ignored
psql: warning: extra command-line argument "DATABASE" ignored
psql: warning: extra command-line argument ""db1"" ignored
psql: warning: extra command-line argument "TO" ignored
psql: warning: extra command-line argument ""user1";" ignored
ERROR: syntax error at end of input
LINE 1: GRANT
^
Я пробовал это по-разному, но все они терпят неудачу: (
Кто-нибудь знает, как это сделать? Большое спасибо!