2016-12-30 5 views
0

Я пытаюсь создать роль postgres и пароль из bash. Однако, похоже, я изо всех сил пытаюсь избежать цитат.Postgres: создание роли и пароля из CLI, проблемы с вложенными кавычками

Продолжительность:

$ sudo su - postgres -c '''psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" ''' 

Производит:

ERROR: syntax error at or near "somepass" 
LINE 1: CREATE USER testuser WITH PASSWORD somepass; 

Другие неудачные варианты, которые я пробовал;

sudo su - postgres -c """psql -c "CREATE USER testuser WITH PASSWORD 'somepass';" """ 
sudo su - postgres -c $''' psql -c "CREATE USER testuser WITH PASSWORD \'pass\';" ''' 

Как я могу справиться с вложенными кавычками и получать postgres для создания роли из cli?

ответ

0

''' и $''' бессмысленны. Они эквивалентны '.

Это потому, что '''foo' обрабатывается как пустая строка в кавычках '' сразу следует другая строка в кавычках 'foo', которая просто foo.

Чтобы получить один ' в одинарную кавычках строки оболочки, используйте '\'':

sudo su - postgres -c 'psql -c "CREATE USER testuser WITH PASSWORD '\''somepass'\'';"' 

Причины это работает: 'foo'\''bar' анализируются как цитируемая часть ('foo'), а затем в кавычках, но обратной косой чертой (\'), а затем другая цитированная часть ('bar'). Все они объединены в форму foo'bar.

+0

Хорошо работает, спасибо! –

0

Вы можете избежать всех цитировании проблем с помощью документ-здесь:

#!/bin/sh 
sudo su - postgres -c psql <<OMG 
CREATE USER testuser WITH PASSWORD 'somepass'; 
-- DROP USER testuser ; 
OMG 

BTW: Вы DonT нужен сценарий для этого, он будет работать так же хорошо, в интерактивной оболочке. (Я просто использовал скрипт для его проверки)