我以“guest”用户身份通过 SSH 登录到我的 Linux 服务器(Redhat AS4),然后运行命令echo $PATH
,输出是/usr/local/bin:/bin:/usr/bin
。
但是,当我运行命令su - guest
切换到同一个用户,然后运行命令时echo $PATH
,输出变成/usr/bin:/bin:/usr/local/bin
。
为什么同一个用户在 Linux 服务器上的 PATH 值不同?这让我得到了不同的 Python 版本,我不知道是什么导致了这个问题。
答案1
尝试使用中描述的技术进行调试我的答案在超级用户上,使用
debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"
/etc/bashrc、/etc/profile 等也类似。
答案2
检查 /etc/login.def 中的字段 ENV_SUPATH 和 ENV_PATH
为了良好的脚本编写实践,不要依赖 PATH 变量来执行命令,因为它具有歧义。
答案3
两种情况下,所用的脚本(对 PATH 进行不同的操作)是不同的。
由于您使用了该-
选项,su
因此应该使用登录脚本,而不ssh
应该使用。
我不知道你到底想要哪种行为,但也许你可以检查一下su 选项(例如 -m,--preserve-environment:不重置环境变量)有帮助吗?
答案4
来自 su 手册页
su is used to become another user during a login session. Invoked with-
out a username, su defaults to becoming the super user. The optional
argument - may be used to provide an environment similiar to what the
user would expect had the user logged in directly.
因此你总是会在“su”和“su -”上获得不同的环境设置