Bash

如何獲取執行 bash 腳本的使用者名作為 sudo?

  • November 4, 2014

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

讓我們看看裡面myscript.sh

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

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

我不確定它有多標準,但至少在 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

如果您希望它也能正常工作sudo,請使用${SUDO_USER:-$USER}. 例如:

printf '%s\n' "${SUDO_USER:-$USER}"

解釋

${var:-val}將擴展為$var,除非它未設置或為空,在這種情況下它將擴展為val

引用自:https://unix.stackexchange.com/questions/137175