我得到了一个需要sudo的脚本,但是该脚本必须根据原始用户设置参数,例如:
chown "${USER}:${USER}" dir
如果我将其设置在 sudo 下,我最终只会得到chmod root:root
,这没有帮助。
那么如何才能获取sudo之前的用户名呢?
答案1
环境变量 SUDO_USER 应该可以替代 USER。
由于您将所有权设置为 USER:USER,我假设总有一个与用户同名的组?否则,更严格的解决方案可能是使用 SUDO_UID 和 SUDO_GID。
那么可能有两种解决方案:
chown "${SUDO_USER}:${SUDO_USER}" dir
或者
chown "${SUDO_UID}:${SUDO_GID}" dir
答案2
您可以使用SUDO_USER
变量:
sudo bash -c 'echo $SUDO_USER'
来自须藤手册页:
须藤使用以下环境变量。安全策略可以控制命令环境的实际内容。[...]
SUDO_UID
设置为调用 sudo 的用户的用户 ID。
SUDO_USER
设置为调用 sudo 的用户的登录名。
答案3
SUDO_USER 可以被用户覆盖。
$ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
USER=root
SUDO_USER=test
USERNAME=root
您应该使用“我是谁”或“logname”来获取原始用户名
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto pts/4 Jan 23 15:13 (:0.0)