Environment-Variables
更改使用者並在 shell 腳本中載入整個環境
我在使用我們的新貴腳本時遇到了一些麻煩,該腳本會更改使用者並啟動一些 ruby 守護程序。
在過去,我只是
bash -c "do the business" -l someuser
確保使用該-l
標誌來模擬登錄。到目前為止,這一直很好用,我們的 ruby 程序一直在拋出以下錯誤:
require: no such file to load -- rubygems (LoadError)
經過一番調查,我發現這個錯誤僅在我以 root 使用者身份執行腳本時發生,即(當我sudo su
或被暴發戶執行時)。我認為這是一個 PATH 問題,因為當我首先手動設置路徑時,它可以解決問題。
有沒有辦法改變使用者並載入整個環境?
我也試過
su user -c
和sudo
。為了更容易測試,我正在“紮根”(
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_profile
or/etc/profile
,請參閱this。
對於登錄上下文,請使用:
sudo -i -u USER COMMAND
su -l USER -c COMMAND