mar*_*cio 20 bash users sudo shell-script
我想创建一个必须使用 sudo 执行的 bash 脚本,但应该考虑执行它的非 sudo 用户的名称。因此,如果用户bob运行,sudo ./myscript.sh我想myscript.sh知道bob是执行它的人。
让我们看看里面myscript.sh:
USER=$(whoami)
# Do something that takes into account the username.
Run Code Online (Sandbox Code Playgroud)
我怎么知道产生这个进程的用户的名字?更具体地说,我应该使用什么而不是whoami获取bob而不是root?
ste*_*ver 32
我不确定它有多标准,但至少在 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
Run Code Online (Sandbox Code Playgroud)
例如,
steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver
Run Code Online (Sandbox Code Playgroud)
nyu*_*a7h 10
如果您希望它也能正常工作sudo,请使用${SUDO_USER:-$USER}. 例如:
printf '%s\n' "${SUDO_USER:-$USER}"
Run Code Online (Sandbox Code Playgroud)
${var:-val}将扩展为$var,除非它未设置或为空,在这种情况下它将扩展为val。