
我想創建一個必須使用 sudo 執行的 bash 腳本,但應考慮執行它的非 sudo 用戶的名稱。因此,如果用戶bob
運行,sudo ./myscript.sh
我想myscript.sh
知道bob
是誰執行了它。
讓我們看看裡面myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
我如何知道產生該進程的使用者的名稱?更具體地說,我應該使用什麼來代替whoami
getbob
和 not root
?
答案1
我不確定它有多標準,但至少在 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
答案2
sudo
如果您希望它在沒有情況下也能工作,請使用${SUDO_USER:-$USER}
.例如:
printf '%s\n' "${SUDO_USER:-$USER}"
${var:-val}
將擴展為$var
,除非它未設定或為空,在這種情況下它將擴展為val
。