如何将 postgres 结果插入到 shell 变量中

如何将 postgres 结果插入到 shell 变量中

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

 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 变量?

答案1

这个问题有点难以理解。

通过“插入.....的结果”,您是否将数据库名称“graphite”作为脚本中其他命令的变量插入?

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

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

第三,确保您有办法输入 su 用户的凭据/密码,具体取决于实际运行脚本的用户。

假设您可以:

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

  2. 您尝试过使用吗sudo -u postgres?postgres 用户必须位于 /etc/sudoers 文件中。

  3. 就此而言,您在系统日志中看到了什么?运行此脚本时可能出现错误,并且命令未完成。您是否已验证对库、postgres 命令和目录的权限?

  4. 也许可以尝试一下sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"

以下是这些命令的详细描述和示例: Linux SU、SUDO

相关内容