我目前正在配置开放网格调度程序在 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 有关。