2011-03-29 57 views
0

我需要通過在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; 
              ^

我想說的是,錯誤是因爲Unicode是由」括起來。而sudo命令封裝b你也是。

UPDATE

逃跑的unicode \'unicode\'不起作用。我得到>,它掛在那兒永遠....

UPDATE2

最後的PHP代碼是一樣

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

感謝@Matthew Scharley

回答

1

這是一個有點怪異,但你的雙撇號發生了什麼事情是它關閉了字符串,然後再次打開它,這會讓你沒有任何東西。解決方案如下:

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

ie。將撇號放在關閉和打開之間的雙引號中。這將在至少bash類型的shell中起作用,但我不使用其他人來了解它們的工作方式。

+0

對我來說就像一個魅力,謝謝 – Radek 2011-03-29 00:54:28

+0

一個更多的想法...我從PHP調用sudo ...和'exec(「sudo -su postgres'psql -c」創建數據庫「$ db。」用'''''unicode''''''; \「-U edumate template1'」,$ output);'不起作用。以上的作品不是來自命令行。 – Radek 2011-03-29 01:00:34

+0

@Radek:歡迎來到地獄;我們希望您享受您的逗留。您需要轉義** all **雙引號:'exec'「undoode'\」'\'''''''''' 「'; \」-U edumate template1'「,$ output);' – 2011-03-29 01:26:40