如何将postgres结果插入到shellvariables中

我想在variables中设置所有这些语法

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\"" 

到一个shellvariables?

这个问题有点难以遵循。

通过“插入…..的结果”,你是否在脚本中插入数据库名称'graphite'作为其他命令的variables?

你如何处理切换用户时出现的密码提示? 或者这个脚本是由root运行的?

我很困惑你为什么使用-l选项 – 通常是列出命令。 你想要这个命令作为postgres运行吗? 然后,您应该使用-u postgres选项,告诉命令以postgres用户身份运行此命令。

第三,确保你有一个方法来inputsu用户的凭证/密码,这取决于用户实际上在运行脚本。

假设你可以:

  1. 以sudo方式运行整个脚本,而不是尝试更改脚本中的用户,这通常会生成密码提示。

  2. 你有没有尝试使用sudo -u postgres ? postgres用户必须位于/ etc / sudoers文件中。

  3. 在那张纸上,你在系统日志中看到了什么? 运行此脚本可能会出现错误,并且命令未完成。 你有没有validation图书馆,postgres命令和目录的权限?

  4. 也许尝试它作为sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"

这里有一个很好的描述和这些命令的例子: Linux SU,SUDO