sudo在執行的時候預設會重置PATH環境變數
而不是使用root的PATH環境變數
例.以root帳號開啟終端機(需先修改PATH讓他跟預設不同)
$env
PATH=/root/cbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
$sudo env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
看出差別了嗎?
root帳號有我自己加進去的/root/cbin
而用sudo去執行就沒有,因為他會重置成/etc/login.defs裡面的設定
$cat /etc/login.defs
會看到這兩行ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
所以接下來有幾種解決的方法
方法1:在.bashrc設定alias,在sudo時帶入PATH環境變數(僅套用至目前帳號)
$nano ~/.bashrc
加入以下這行
alias sudo='sudo env PATH=$PATH'
方法2:直接修改login.defs(影響全系統)
$nano /etc/login.defs
在這兩行修改成自己想要的
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
方法3:關閉重置環境變數的設定(影響全系統)
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults !env_reset
方法4:設定保留PATH環境變數的設定(影響全系統)
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults env_keep = "PATH"
沒有留言:
張貼留言