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


9

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

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

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

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

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

我也曾尝试su user -csudo


为了使测试更容易,我正在“扎根”(sudo su)并运行which bundle(捆绑是一件红宝石的东西)。

这是我得到的:

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

但是以Webuser的身份登录

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

1
你试过了su - user -c吗?
Karlson 2012年

这是什么分布?
artistoex 2012年

您的脚本是否取决于每个用户安装的ruby模块?
基思

@artistoex这是ubuntu :)
Daniel Upton

1
我将确保它确实是PATH问题(将变量转储到脚本中)。然后比较PATH并查看/etc/profile ~/.bash_profile ~/.bash_login~/.profile。对于登录shell,bash按照给定顺序对其进行评估。
artistoex 2012年

Answers:


10

使用sudo su - user -c将使您好像在该人继承其路径时登录。这就是为什么su user与有所不同的原因su - user

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

您应该改用.bash_profile/etc/profile,看看这个


3
您应该注意su -su -l是同义词。
jordanm 2012年

3
并可能建议--login您提高可读性。

3

对于登录上下文,请使用以下任一方法:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.