2016-12-30 12 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\';" ''' 

중첩 된 따옴표를 어떻게 다룰 수 있으며 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

당신은 여기-문서를 사용하여 모든 인용 문제를 방지 할 수 있습니다 BTW

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

: 당신이, 그것은 대화 형 쉘에서와 마찬가지로 잘 작동합니다 이것에 대한 스크립트를 필요 없어요 . (방금 스크립트를 사용하여 테스트했습니다)