更改用户并在 shell 脚本中加载整个环境

Dan*_*ton 10 login su path environment-variables

我在使用我们的新贵脚本时遇到了一些问题,该脚本更改了用户并启动了一些 ruby​​ 守护进程。

在过去,我只会bash -c "do the business" -l someuser确保使用该-l标志来模拟登录。

到目前为止,这一直很有效,我们的 ruby​​ 进程一直在抛出以下错误:require: no such file to load -- rubygems (LoadError)经过一些调查,我发现此错误仅在我以 root 用户身份运行脚本时发生,即(当我sudo su或由 upstart 运行时)。

我认为这是一个 PATH 问题,因为当我首先手动设置路径时,它可以解决问题。

有没有办法改变用户并加载整个环境?

我也试过su user -csudo


为了更容易测试,我正在“root”(sudo su)并运行which bundle(捆绑是一个红宝石)。

这是我得到的:

  • sudo -i -u webuser which bundle # => 没有输出
  • su -l webuser -c which bundle # => 没有输出
  • sudo su - webuser -c which bundle # => 没有输出

但是 ssh 以网络用户身份登录

  • which bundle # => /opt/ruby/bin/bundle

小智 10

使用sudo su - user -c将使您像以继承其路径的那个人的身份登录一样。这就是为什么su user不同于su - user.

但是,如果您在.bashrc文件中设置路径,它只会对交互式会话生效(即以该用户身份登录)。

您应该改用.bash_profileor /etc/profile,请参阅

  • 你应该注意到 `su -` 和 `su -l` 是同义词。 (3认同)
  • 并且应该推荐 `--login` 以提高可读性。 (3认同)