我想在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用户的凭证/密码,这取决于用户实际上在运行脚本。
假设你可以:
以sudo方式运行整个脚本,而不是尝试更改脚本中的用户,这通常会生成密码提示。
你有没有尝试使用sudo -u postgres
? postgres用户必须位于/ etc / sudoers文件中。
在那张纸上,你在系统日志中看到了什么? 运行此脚本可能会出现错误,并且命令未完成。 你有没有validation图书馆,postgres命令和目录的权限?
也许尝试它作为sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"
这里有一个很好的描述和这些命令的例子: Linux SU,SUDO