2016-12-30 68 views
0

我试图从bash创建postgres角色和密码。但是,似乎我正在努力逃避报价。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

为了得到一个'成单引号shell字符串,用'\''

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:你需要为这个脚本,它会在交互的shell很好的工作。 (我只是用脚本来测试它)