在 Linux 中设置一个全局环境变量,在进入 root 时保持不变

Sco*_*ott 2 linux bash

当我通过 SSH 连接到 Linux 机器时,我想让/etc/profile文件将whoami命令的结果保存到全局环境变量中。

如果我要使用命令进入 root sudo su -,我不希望该命令在进入 root 时再次运行。我希望它whoami在我进入 root 之前使用我的常规用户名的结果,并且需要以 root 用户身份访问该变量,即使它会/etc/profile在我进入 root 时再次运行该文件。

我该怎么做才能在命令中只运行一次该/etc/profile命令?

小智 5

通过登录 shell 保留环境变量需要-m开关。保护环境变量过去须藤需要改变env_keep的/ etc / sudoers文件。即便如此,这样做也是有问题的。

幸运的是,还有其他方法可以解决这个问题。例如,您的 tty 归您最初登录的用户所有。因此,将其添加到 /etc/profile 的末尾:

TTY=$(tty)
if [ -n "$TTY" ]; then
    WHOAMI=`ls -al $TTY | awk '{print $3}'`
fi
Run Code Online (Sandbox Code Playgroud)

您将 WHOAMI 变量设置为 tty 的所有者,如果有的话,将 sudo 和非 sudo su 都设置为 root:

[corman@localhost ~]$ sudo su -
Password:
[root@localhost ~]# echo $WHOAMI
corman
[root@localhost ~]# logout
[corman@localhost ~]$ su -
Password:
[root@localhost ~]# echo $WHOAMI
corman
[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)

  • 更简洁的写`WHOAMI=$(stat --format="%U" "$TTY")` (2认同)