
我通過 ssh 進入我的機器,然後,為了運行一些命令,我需要sudo bash
先執行。
在互動式終端會話中,如果我這樣做:
[vagrant@33 ~]$ sudo bash
[root@33 vagrant]# which bundle
/opt/upnxt/rbenv-0.4.0-7/shims/bundle
事情有效。但如果我需要在一行中執行此操作:
[vagrant@33 ~]$ sudo bash -c "whoami; which bundle"
root
which: no bundle in (/sbin:/bin:/usr/sbin:/usr/bin)
事情停止了。為什麼會發生這種情況?
答案1
當你呼叫時,sudo bash
你運行 bash 的新實例user root environment
。但是,如果您呼叫sudo bash -c "whoami; which bundle"
環境,則該環境仍保留給您的使用者。如果您不想這樣做,您可以透過sudo
選項修改上次調用-i
-我,--登入
執行由目標使用者的密碼資料庫條目指定的 shell 作為登入 shell。這意味著登入特定的資源文件,例如。或者.登入將會被 shell 讀取。如果指定了命令,則該命令將通過 shell 的-C選項。如果未指定命令,則執行互動式 shell。 須藤在執行 shell 之前嘗試變更到該使用者的主目錄。該命令在類似於使用者登入時收到的環境中運行。命令環境部分中的蘇多爾斯(5) 手冊記錄了使用 sudoers 策略時 -i 選項如何影響命令運作的環境。