我想在变量中设置所有这些语法
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 用户的凭据/密码,具体取决于实际运行脚本的用户。
假设您可以:
以 sudo 身份运行整个脚本,而不是尝试更改脚本内的用户,这通常会生成密码提示。
您尝试过使用吗
sudo -u postgres
?postgres 用户必须位于 /etc/sudoers 文件中。就此而言,您在系统日志中看到了什么?运行此脚本时可能出现错误,并且命令未完成。您是否已验证对库、postgres 命令和目录的权限?
也许可以尝试一下
sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"
以下是这些命令的详细描述和示例: Linux SU、SUDO