繁体   English   中英

为什么/etc/profile.d仅在SSH登录时使用?

[英]Why is /etc/profile.d only used at SSH login?

/etc/profile.d的使用使我感到困惑。

我可以在其中放一个包含内容的文件

export MYVAR=MYVALUE

当我使用SSH MYVAR登录计算机时, MYVAR具有一个值。

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

我不明白为什么会这样。 我认为Linux文档指出在启动Shell时会使用这些文件。

当我在终端窗口中启动/bin/bashMYVAR也为空。

这根本不符合逻辑。 为什么此目录仅用于SSH登录?

要了解这里发生的情况,您需要了解一些有关如何运行shell(在本例中为bash)的背景信息。

传统上,在unix系统上定义每个用户环境变量的位置是〜/ .profile。 如果登录外壳程序是与Bourne兼容的外壳程序,则登录外壳程序(即登录时启动的程序,可以在其中键入命令)读取该文件。

Bash是Bourne兼容的外壳。 当作为登录名调用它时,如果此文件存在,则外壳程序读取〜/ .bash_profile,如果〜/ .bash_profile不存在,则读取〜/ .profile。

根据经验,如果您以文本模式(例如,在文本控制台上或使用ssh远程)键入密码,则获得的shell是登录shell。

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

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

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

/ etc / profile读取/etc/profile.d/*.sh。 登录shell读取/ etc / profile。 (男子扑)

登录shell:桌面,虚拟控制台(Ctrl + Alt + F1),ssh, su - userbash --login

不登录shell:GNOME终端, su userbash ,ssh + command,shellscript

重新启动桌面(* .sh导出MYVAR)> GNOME终端(具有值)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM