我以用户'guest'的身份通过SSHlogin到我的Linux服务器(Redhat AS4),然后运行命令echo $PATH ,输出为/usr/local/bin:/bin:/usr/bin 。
但是,当我运行命令su - guest切换到同一个用户,然后运行命令echo $PATH ,输出成为/usr/bin:/bin:/usr/local/bin 。
为什么同一用户在Linux服务器上有不同的PATH值? 这使我得到不同的Python版本,我不知道是什么原因造成这个问题。
尝试使用我在超级用户的答案中描述的技术进行debugging
debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"
和/ etc / bashrc,/ etc / profile等类似。
检查/etc/login.def中的ENV_SUPATH和ENV_PATH字段
对于良好的脚本实践,不要依赖PATHvariables来执行命令,因为它是不明确的。
不同的脚本(对PATH进行不同的操作)来源于两种情况。
既然你使用的是-选项, su应该input你的login脚本,而ssh不应该。
我不知道你想要哪种行为,但是也许你可以检查一些su选项 (例如-m,–preserve-environment:不重置环境variables)是否有帮助?
它像这样goees:
在/ etc / passwd中,用户标识定义了一个主目录和一个默认的shell:
auser:!:97:51::/home/user:/usr/bin/ksh
当用户login'ksh'或者bash或者其它的东西时,这个会从'/ etc / environment'文件中find一个默认的'PATH'(有些shell会运行一个系统范围的初始化文件),但是它也会运行上述“.kshrc”文件中主目录中的初始脚本中的命令。
所以PATH可以通过初始命令,初始命令的系统范围设置以及用户主目录下的“hidden”.rc文件来设置。
“su – ”不会运行与初始命令相同的命令,因为login只会从“/ etc / environment”文件中选取默认设置。
从su manpage
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 – ”上得到不同的env设置