Shell,回显文件并在另一个程序中用作参数

时间:2017-04-28 14:20:01

标签: shell

我有我的数据库连接字符串我从其他程序获取,我想将它用作psql的参数:

示例:

http get https://api.heroku.com/apps/foo-app/config-vars Accept:"application/vnd.heroku+json;version=3" | jq '.DATABASE_URL'

返回:

postgres://foo:bar@example.com:5432/mydb

我希望基本上能够:

http get https://api.heroku.com/apps/foo-app/config-vars Accept:"application/vnd.heroku+json;version=3" | jq '.DATABASE_URL' | psql ?

我该怎么做,我宁愿避免像这样评估整个字符串:

psql $(http get https://api.heroku.com/apps/foo-app/config-vars Accept:"application/vnd.heroku+json;version=3" | jq '.DATABASE_URL')

2 个答案:

答案 0 :(得分:1)

没有必要担心$(),特别是如果你引用它并且它没有启动命令:

psql "$(http get https://api.heroku.com/apps/foo-app/config-vars Accept:"application/vnd.heroku+json;version=3" | jq '.DATABASE_URL')"

如果你没有引用它,另一方可能会让你的shell进行不必要的单词拆分和通配,但就是这样。你实际上并没有eval在这里使用字符串。

str="argument; echo danger" #example wanna-be malicous payload
: $str                      #will not echo danger
eval ": $str"               #this will

答案 1 :(得分:0)

试试这个:

psql $(cat db.txt)

见这里:

https://www.postgresql.org/docs/9.2/static/app-psql.html