我可以在Vagrant bootstrap shell脚本中切换用户吗?

前端之家收集整理的这篇文章主要介绍了我可以在Vagrant bootstrap shell脚本中切换用户吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑显然,问题是我应该做
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命令:

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信任的身份验证。

解决方法

我不知道你是否可以切换用户在Vagrant外壳脚本,因为这可能需要用户输入,你不能给它当脚本在配置文件中运行…但为什么不只是使用psql命令指定用户
psql --username=postgres -c "..."

猜你在找的Bootstrap相关文章