如何取得以 sudo 身分執行 bash 腳本的使用者名稱?

如何取得以 sudo 身分執行 bash 腳本的使用者名稱?

我想創建一個必須使用 sudo 執行的 bash 腳本,但應考慮執行它的非 sudo 用戶的名稱。因此,如果用戶bob運行,sudo ./myscript.sh我想myscript.sh知道bob是誰執行了它。

讓我們看看裡面myscript.sh

USER=$(whoami)
# Do something that takes into account the username.

我如何知道產生該進程的使用者的名稱?更具體地說,我應該使用什麼來代替whoamigetbob和 not root

答案1

我不確定它有多標準,但至少在 Ubuntu 系統中sudo設定了以下環境變數(除其他外 - 請參閱ENVIRONMENTsudo 手冊頁的部分):

   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

相關內容