编辑显然,问题是我应该做
su-postgres -c“命令,命令,命令”,
即,将任何命令传递给su,而不是尝试将它们列在su下面,因为这些命令(su下面)不受su影响。 /编辑
su-postgres -c“命令,命令,命令”,
即,将任何命令传递给su,而不是尝试将它们列在su下面,因为这些命令(su下面)不受su影响。 /编辑
编辑2:参见David Braun的答案一个更好的解决方案:http://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: FATAL: role “root” does not exist
用sudo su-postgres替换su-postgres没有效果(我认为脚本已经作为root运行)。
我在su – postgres之前和之后添加了id(打印当前用户ID),并且在su调用之前和之后打印uid = 0(root)gid = 0(root)groups = 0(root)。所以,据我所知,su-postgres被忽略了?和一个特定的退出,后来当我试图切换回root用户,完全退出引导脚本:-(
然而。在做vagrant ssh后,我可以sudo su – postgres只是很好,然后启动psql。但不是从供应脚本内。
(一种解决方法是在调用psql(而不是将用户切换到postgres)时指定-h 127.0.0.1 –username postgres)并且还为VM本地连接启用基于Postgresql信任的身份验证。