如何将PostgreSQL结果插入shell变量

时间:2017-11-07 11:42:34

标签: bash postgresql shell variables psql

我想在变量

中设置所有这些语法
su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

CREATE DATABASE 

所以我写了这个

res=$(  su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\"" )

CREATE DATABASE 

$ res 为空

echo $res

我也尝试添加" "但没有成功。

如何插入

的结果
su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

到shell变量?

2 个答案:

答案 0 :(得分:1)

检查生成的退出状态是否有效:

MacBook-Air:~ root# res=$(su -l vao -c "/usr/local/Cellar/postgresql/9.6.1/bin/psql -c \"CREATE DATABASE graphite\" -d so")
MacBook-Air:~ root# echo $?
0
MacBook-Air:~ root# res=$(su -l vao -c "/usr/local/Cellar/postgresql/9.6.1/bin/psql -c \"CREATE DATABASE graphite\" -d so")
ERROR:  database "graphite" already exists
MacBook-Air:~ root# echo $?
1

并且stdout也显示:

MacBook-Air:~ root# echo $res
Timing is on. Pager usage is off. SET Time: 0.333 ms SET Time: 0.112 ms SET Time: 0.127 ms Time: 0.290 ms

答案 1 :(得分:0)

这是一个更通用的答案,但反引号(`)会将任何shell命令的结果放入变量中:

object HigherOrderFunction 
{
   def main(args: Array[String]):Unit = 
   {  
       functionExample(25, multiplyBy2)
       println({println(25); 25*2}) 
       // Evaluates the "value" passed in println, which causes 25 to be printed, 
       // then prints the result of the value, 50.
       println(25)
   }    
}

那就是说,我很好奇你为什么要在shell变量中得到$ foo=`psql -d postgres -c "select 'Hello'"` $ echo $foo ?column? ---------- Hello (1 row) 命令的结果。我确定这是一个很好的理由,我绝不会想到做这样的事情。