как использовать апостроф («внутри», а затем внутри ») - PullRequest
0 голосов
/ 29 марта 2011

Мне нужно выполнить эту команду через sudo в php.Но sudo должна иметь команду внутри апострофов.

psql -c "create database radek with encoding 'unicode';" -U edumate template1

, поэтому

sudo -su postgres 'psql -c "create database radek with encoding ''unicode'';" -U edumate template1'

дает мне ошибку

ERROR:  syntax error at or near "unicode"
LINE 1: create database radek with encoding unicode;
                                            ^

Я бы сказал, что ошибка происходитпотому что юникод заключен в '.И команда sudo заключена в 'тоже.

UPDATE

экранирование Unicode \'unicode\' не работает.Я получаю >, и он висит там навсегда ....

UPDATE2

окончательный код php выглядит как

exec("sudo -su postgres 'psql -c \"create database " . $db . " with encoding '\"'\"'unicode'\"'\"';\" -U edumate template1'", $output); 

благодаря @Matthew Scharley

1 Ответ

1 голос
/ 29 марта 2011

Это немного странно, но то, что происходит с вашим двойным апострофом, заключается в том, что он закрывает строку, а затем снова открывает ее, что дает вам чистую сеть. Решение заключается в следующем:

sudo -su postgres 'psql -c "create database radek with encoding '"'"'unicode'"'"';" -U edumate template1'

есть. Поместите апостроф в двойные кавычки между закрытием и открытием. Это будет работать как минимум в оболочках типа bash, но я не использую других, чтобы знать, как они работают.

...