2017-05-17 70 views
0

使用/etc/profile.d令我困惑。为什么仅在SSH登录时使用/etc/profile.d?

我可以把一个文件在里面,例如与内容

export MYVAR=MYVALUE 

,当我登录的使用SSH MYVAR该机拥有一块价值。

这台机器是Ubuntu桌面,当我用普通登录登录并启动一个终端MYVAR没有任何价值。

我不明白为什么会这样。 Linux文档我认为这些文件是在我启动shell时使用的。

当我开始/bin/bash在终端窗口MYVAR也是空的。

这没有意义。为什么这个目录只用于SSH登录?

+1

Stackoverflow用于帮助软件开发。你应该考虑在[unix.se],[ubuntu.se]或[su]上提问。 – Kenster

回答

2

为了理解这里发生了什么,您需要了解关于如何运行shell(在这种情况下是bash)的一些背景信息。

传统上,在UNIX系统上定义每个用户环境变量的地方是〜/ .profile。该文件由登录shell(即登录时启动的程序以及可以键入命令的程序)读取,前提是登录shell是Bourne兼容的shell。

Bash是Bourne兼容的外壳。当它作为登录shell被调用时,如果该文件存在,则读取〜/ .bash_profile;如果〜/ .bash_profile不存在,则会被〜/ .profile读取。作为一个经验法则,如果你在文本模式下输入你的密码(例如,在文本控制台上,或者用ssh远程输入),那么你得到的shell就是一个登录shell。

但是,如果您在图形程序中输入密码并登录到图形环境,则会绕过正常的登录shell。在这种情况下是否读取.profile取决于图形会话的设置方式;例如,它在Linux发行版,显示管理器和桌面环境之间有所不同。有时链中的某个程序显式调用登录shell;有时一个proPleagrams显式读取〜/ .profile;有时候这些都不会发生,并且〜/ .profile不会被读取。

你可以尝试设置环境变量在〜/ .bashrc或/ etc/.bashrc中

0

重新启动Ubuntu桌面。然后,一个GNOME终端MYVAR有一个值。

/etc/profile读取/etc/profile.d/*.sh。登录shell将读取/ etc/profile。 (人的bash)

登录壳:台式机,虚拟控制台(Ctrl + Alt + F1),SSH,su - userbash --login

未登录壳:GNOME终端,su userbash,SSH +命令,shell脚本

重新启动桌面(*。sh导出MYVAR)> GNOME终端(有一个值)