我想创建一个必须使用 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
。