$JAVA_HOME
我在“/etc/environment”中创建了一个变量
JAVA_HOME="/usr/lib/jvm/jdk"
PATH="...bla bla bla:$JAVA_HOME/bin"
我还进行了编辑/etc/profile
,source /etc/environment
以便所有用户都能熟悉 Java。并且目录本身已设置为 755 以供访问。
打印输出root
如下env
:
LANG=C.UTF-8
SUDO_GID=1000
USERNAME=root
JAVA_HOME=/usr/lib/jvm/jdk
SUDO_COMMAND=/bin/su
USER=root
PWD=/home/ssuser
HOME=/root
SUDO_USER=ssuser
SUDO_UID=1000
MAIL=/var/mail/root
TERM=xterm
SHELL=/bin/bash
SHLVL=2
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin
ssuser
但是,当我执行与不使用-ing相同的操作时sudo
,环境变量$JAVA_HOME
将扩展为实际路径。
SSH_CONNECTION=193.128.134.115 18497 10.1.4.4 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
JAVA_HOME=/usr/lib/jvm/jdk
XDG_SESSION_ID=2
USER=ssuser
PWD=/home/ssuser
HOME=/home/ssuser
SSH_CLIENT=193.128.134.115 18497 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/ssuser
TERM=xterm
SHELL=/bin/bash
SHLVL=1
LOGNAME=ssuser
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk/bin
LESSOPEN=| /usr/bin/lesspipe %s
/etc/sudoers
这与env_var 重置/保留设置中的设置无关。因为我已经在另一台计算机上尝试过了,效果很好。
我有点不明白为什么会发生这种情况。另外,我注意到一个非常奇怪的事情是,对于单个会话 sudo 用户不会被提示输入密码。我已经检查过/etc/sudoers
,它已正确设置为询问密码root
。
我尝试过关闭会话并重新打开。我可以将他们视为普通用户,而不是 root。此外,重新启动不会做任何不同的事情。
答案1
据我所知,您不需要放入源代码/etc/environment
,/etc/profile
因为它不是 shell 脚本。
它应该只包含key=value
对(不包含"
)。 Plus/etc/environment
不会像$JAVA_HOME
这里那样替换变量。
/etc/environment
在启动时加载,因此您需要重新启动,它将可供所有用户使用。
这参考有一条注释专门指出变量扩展在以下情况下不起作用/etc/environment
:
注意:变量扩展在 /etc/environment 中不起作用。