2013-05-14 139 views
3

我试图在psql命令中插入bash变量作为连接参数以及命令本身的变量时发疯。下面的示例正常工作:在psql命令中插入bash变量

psql -U postgres -h localhost -p 5432 -c "CREATE DATABASE testdb WITH ENCODING='UTF8' OWNER=postgres TABLESPACE=pg_default TEMPLATE=template_postgis CONNECTION LIMIT=-1;" 

现在我想通过一个变量,它是在特殊的配置文件保存到Exchange中的每个参数。

非工作示例:

dbserver=localhost 
dbport=5432 
dbowner=postgres 
dbname=testdb 
dbtemplate=template_postgis 
dbtablespace=pg_default 

psql -U '$dbowner' -h '$dbserver' -p '$dbport' -c "CREATE DATABASE '$dbname' WITH ENCODING='UTF8' OWNER='§dbowner' TABLESPACE='$dbtablespace' TEMPLATE='$dbtemplate' 
CONNECTION LIMIT=-1;" 

我试过几个quotings,后引号和逃生斜线既可smhow它仍然是行不通的。 由于提前,knutella

+0

和t他错误你得到的是... – 2013-05-14 11:44:18

回答

2

用双引号(“)。单引号(')不解释里面shell变量。

试试吧

echo '$USER' "$USER" 

man bash

+0

谢谢,这也适用于我现在工作正常。正如我在上面的评论中写道的:...我的变量来源不正确和空。 – knutella 2013-05-14 13:18:38

3

这作品...大多数报价是不需要的:

psql -U $dbowner -h $dbserver -p $dbport -c "CREATE DATABASE $dbname WITH ENCODING='UTF8' OWNER=$dbowner TABLESPACE=$dbtablespace TEMPLATE=$dbtemplate CONNECTION LIMIT=-1;" 
+0

谢谢你现在做的伎俩。实际上,我已经在第一次尝试过了,但问题是,参数不是从配置文件中进行探测。 – knutella 2013-05-14 13:14:12