在 FreeBSD 中为 root 帐户下的登录 shell 设置环境变量

在 FreeBSD 中为 root 帐户下的登录 shell 设置环境变量

我目前正在配置开放网格调度程序在 FreeBSD 中。作为此过程的一部分,我需要将环境变量设置SGE_ROOT为 root。

为此,我一直在尝试通过 root 帐户设置此值,~/.profile因为此帐户已配置为使用 Bourne shell 作为其默认 shell。我已导出SGE_ROOT如下:export SGE_ROOT="/usr/local/sge"

SGE_ROOT但是,在登录到配置好的root shell 后,~/.profile这种设置环境变量的方法似乎不起作用,因为运行该命令env会返回以下内容:

SUDO_COMMAND=/usr/bin/su
LOGNAME=root
MAIL=/var/mail/root
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/ec2-user/bin:/usr/local/sge/bin/fbsd-amd64
SUDO_GID=1001
PWD=/usr/home/ec2-user
TERM=xterm
HOME=/root
USER=root
SHELL=/bin/sh
SUDO_USER=ec2-user
SUDO_UID=1001
USERNAME=root

然而,我注意到,PATH我通过 root 配置的~/.profile包含 Open Grid Scheduler 二进制文件的变量似乎已成功设置。

我还发现,在同一台机器上使用非 root 帐户执行相同的配置可以成功设置环境变量。此外,在全局中导出值/etc/profile似乎会产生相同的行为。

因此,我想知道是否有更好的方法来为 Bourne shell 下的 root 帐户设置此变量?

我理解使用 tcsh 作为 root 的默认 shell 可能会更简单,因为 FreeBSD 通常就是这样配置的。但是,由于 FreeBSDutmp.h不再提供 tcsh,我迄今为止不得不编译不支持 tcsh 的 Open Grid Scheduler。

答案1

我注意到您有 SUDO 环境变量,因此我假设您使用 sudo 运行此命令。为了进行测试,我将 root 用户的 shell 设置为 /bin/sh,并添加了

SGE_ROOT="/usr/local/sge"

导出 SGE_ROOT

到我的/root/.profile

如果我只是运行“sudo sh”,则看不到环境变量,但如果我运行“sudo -i”或“sudo su -”,则会看到环境变量,因此似乎问题与 sudo 的使用方式有关,而不是与 shell 有关。

相关内容