Environment-Variables

更改使用者並在 shell 腳本中載入整個環境

  • January 7, 2021

我在使用我們的新貴腳本時遇到了一些麻煩,該腳本會更改使用者並啟動一些 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# => 沒有輸出

但是 ssh 以網路使用者身份登錄

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

使用sudo su - user -c將使您以繼承其路徑的人身份登錄。這就是為什麼su user不同於su - user.

但是,如果您在.bashrc文件中設置路徑,它只會對互動式會話生效(即以該使用者身份登錄)。

您應該改用.bash_profileor /etc/profile,請參閱this

對於登錄上下文,請使用:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND

引用自:https://unix.stackexchange.com/questions/48626