Bash
如何獲取執行 bash 腳本的使用者名作為 sudo?
我想創建一個必須使用 sudo 執行的 bash 腳本,但應考慮執行它的非 sudo 使用者的名稱。因此,如果使用者
bob
執行sudo ./myscript.sh
我想myscript.sh
知道bob
是執行它的人。讓我們看看裡面
myscript.sh
:USER=$(whoami) # Do something that takes into account the username.
我如何知道產生該程序的使用者的名稱?更具體地說,我應該使用什麼來代替
whoami
getbob
而不是root
?
我不確定它有多標準,但至少在 Ubuntu 系統中
sudo
設置了以下環境變數(其中包括 - 請參閱ENVIRONMENT
sudo 手冊頁的部分):SUDO_UID Set to the user ID of the user who invoked sudo SUDO_USER Set to the login of the user who invoked sudo
例如,
steeldriver@lap-t61p:~$ sudo sh -c 'whoami' root steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER' steeldriver
如果您希望它也能正常工作
sudo
,請使用${SUDO_USER:-$USER}
. 例如:printf '%s\n' "${SUDO_USER:-$USER}"
解釋
${var:-val}
將擴展為$var
,除非它未設置或為空,在這種情況下它將擴展為val
。