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

Linux 为什么只在SSH登录时使用/etc/profile.d?,linux,bash,ssh,Linux,Bash,Ssh,使用/etc/profile.d让我感到困惑 我可以把一个文件放在里面,比如说内容 export MYVAR=MYVALUE 当我使用SSHMYVAR登录计算机时,它有一个值 这台机器是Ubuntu桌面,当我使用普通登录登录并启动终端时,MYVAR没有任何值 我不明白为什么会这样。我认为Linux文档说明了这些文件是在iShell启动时使用的 当我在终端窗口中启动/bin/bash时,MYVAR也为空 这是没有道理的。为什么这个目录只在SSH登录时使用?要了解这里发生了什么,您需要了解一些有关

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

我可以把一个文件放在里面,比如说内容

export MYVAR=MYVALUE
当我使用SSH
MYVAR
登录计算机时,它有一个值

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

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

当我在终端窗口中启动
/bin/bash
时,
MYVAR
也为空


这是没有道理的。为什么这个目录只在SSH登录时使用?

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

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

Bash是与Bourne兼容的shell。当作为登录调用时,如果此文件存在,shell将读取~/.bash\u profile;如果~/.bash\u profile不存在,shell将读取~/.profile

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

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


您可以尝试在~/.bashrc或/etc/bashrc

中设置环境变量。要了解这里发生的事情,您需要了解一些有关shell(本例中为bash)如何运行的背景信息

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

Bash是与Bourne兼容的shell。当作为登录调用时,如果此文件存在,shell将读取~/.bash\u profile;如果~/.bash\u profile不存在,shell将读取~/.profile

根据经验,如果您在文本模式下键入密码(例如,在文本控制台上,或使用ssh远程),那么您得到的shell就是登录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-user
bash--Login

不登录shell:GNOME终端,
su用户
bash
,ssh+命令,shell脚本


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

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

/etc/profile读取/etc/profile.d/*.sh。登录shell读取/etc/profile。(曼巴什)

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

不登录shell:GNOME终端,
su用户
bash
,ssh+命令,shell脚本


重新启动的桌面(*.sh export MYVAR)>GNOME终端(有值)

Stackoverflow用于帮助软件开发。你应该考虑这个问题,或者,StAdExver是软件开发的帮助。你应该考虑这个问题。