【发布时间】:2013-05-22 01:12:51
【问题描述】:
编辑显然,问题是我应该这样做su - postgres -c "commands, commands, commands",
也就是说,将任何命令传递给su,而不是尝试在su 下方列出它们,因为这些命令(在su 下方)不受su 的影响。 /编辑
编辑 2:请参阅 David Braun 的答案以获得更好的解决方案:https://stackoverflow.com/a/22947716/694469
我不能在 Vagrant 引导 shell 配置脚本中切换用户 (su - postgres) 吗? (为什么不呢?)
我正在编写这样的脚本。在那个脚本中,我这样做:
echo '===== Creating PostgreSQL databases and users'
su - postgres
psql -c "
create user SomeUserName password '...';
alter user ...;
"
在这里,psql 应该尝试以用户 postgres 的身份登录。然而,su - postgres 显然失败了,shell 尝试以用户 root 身份登录。 (显然,root 是运行 Vagrant 引导 shell 脚本的用户。)
所以出现了这个错误并且没有调用 psql 命令:
psql: FATAL: 角色“root”不存在
将su - postgres 替换为sudo su - postgres 无效(我认为脚本已经以root 身份运行。)
我在su - postgres 之前和之后添加了id(打印当前用户ID),并且id 在调用su 之前和之后都打印uid=0(root) gid=0(root) groups=0(root)。据我所知,su - postgres 有点被忽视了?而某个exit,稍后当我尝试切换回 root 用户时,完全退出引导脚本:-(
但是。做vagrant ssh之后,我可以sudo su - postgres就好了,然后开始psql。但不是来自配置脚本。
(一种解决方法是在我调用psql 时指定-h 127.0.0.1 --username postgres(而不是将用户切换到postgres)。并且还为VM 本地连接启用基于PostgreSQL 信任的身份验证。)
【问题讨论】: