我需要运行此命令
psql -c "create database $var with encoding 'unicode';" -U edumate template1
来自不同用户下的脚本。 su语法为su postre -c 'some command'
,因此需要另外引用。另请注意,psql命令里面有$var
变量。
所以'some command'= psql -c“create database $ var with encoding'unicode';” -U edumate template1
和'some command'也必须用引号括起来(我猜)
答案 0 :(得分:5)
当你需要将shell作为单个参数接受时,你可以使用一个技巧,它既有单引号又有双引号。因为shell不会让你转义引号,你需要将它转换为多个邻接的引用字符串,根据需要在单引号和双引号之间切换以保护内部。这很难看,但它确实有效。例如,要
He said "It's done"
是一个参数,你可以接近三个字符串:
'He said "It' - protect this substring with single quotes
"'" - protect this substring with double quotes
's done"' - protect this substring with single quotes
得到:
'He said "It'"'"'s done"'
在你的情况下会产生一个非常丑陋的:
su postre -c 'psql -c "create database '"$var with encoding 'unicode';"'" -U edumate template1'
答案 1 :(得分:1)
您可以尝试sudo
代替su
e.g。
sudo psql -c "create database $var with encoding 'unicode';" -U edumate template1
(注意:我没有完全测试过这个命令,因为我现在没有和我一起使用psql)
答案 2 :(得分:0)
我会将其输入到脚本文件中(将其输入到vi等编辑器中并将其保存到文件中)。然后,chmod + x,然后执行su -c '<filename>'
如果您不想将其保存到文件中,那么您必须在命令中使用\"
或\'
来转义引号,具体取决于您决定使用哪个引号su -c