我可以從使用“sudo”運行的腳本中存取原始 $USER 變數嗎?

我可以從使用“sudo”運行的腳本中存取原始 $USER 變數嗎?

我知道這是一個奇怪的問題。這是腳本:

echo $USER

這是我用來運行它的命令:

sudo ./myscript.sh

現在它會列印“root”,但我希望它會列印jon我的用戶名。有沒有辦法透過更改腳本而不是命令來做到這一點?

答案1

使用SUDO_USER環境變數而不是USER.

sudo將運行它的用戶的名稱放入SUDO_USER環境變數中:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

所以你可以簡單地在腳本中替換$USER為:$SUDO_USER

echo $SUDO_USER

進一步閱讀

答案2

另外@Eliah Kagan 上面的回答,我想指出的是,您還可以輕鬆地進行擴展,無論它是否在sudo上下文中運行,它都可以工作:

echo "${SUDO_USER:-$USER}"

預設情況下,它會擴展到 的值$SUDO_USER,但如果變數未設定或為空,則它會回退到 的值$USER

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

有關 Bash 中預設參數擴展的更多信息,請參見https://wiki.bash-hackers.org/syntax/pe#use_a_default_value

相關內容