我需要在php中通过sudo发出这个命令。但是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命令也包含在'too。
中转义unicode \'unicode\'
不起作用。我得到>
,它永远挂在那里......
最终的PHP代码就像
exec("sudo -su postgres 'psql -c \"create database " . $db . " with encoding '\"'\"'unicode'\"'\"';\" -U edumate template1'", $output);
感谢@Matthew Scharley
答案 0 :(得分:1)
这有点奇怪,但是你的双撇号发生了什么,它正在关闭字符串,然后再次重新打开它,这会让你无所不知。解决方案如下:
sudo -su postgres 'psql -c "create database radek with encoding '"'"'unicode'"'"';" -U edumate template1'
即。将撇号放在关闭和打开之间的双引号中。这将至少在bash
类型的shell中起作用,但我不会使用其他人知道它们是如何工作的。