我知道這是一個奇怪的問題。這是腳本:
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
進一步閱讀
man sudo
,在「環境」部分:SUDO_USER Set to the login name of the user who invoked sudo.
sudo
線上說明頁面還描述了可能會派上用場的其他一些相關環境變量,例如SUDO_UID
和SUDO_GID
答案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。