GNOME 终端是一种非登录 shell 吗?

Lor*_*sum 4 shell bash login environment-variables

根据什么是登录和非登录 shell的答案在 Ask Ubuntu 上,GNOME 终端是一种非登录 shell。正如优秀著作《Fedora 和 Red Hat Enterprise Linux 实用指南,第 6 版》中所指出的:

交互式非登录 shell 执行 ~/.bashrc 文件中的命令。默认的 ~/.bashrc 文件调用 /etc/bashrc。

因此,/etc/profile不会在非登录 shell 中处理。但是,我发现我已将 java 主路径附加到PATH 变量,并且当我使用 GNOME 终端并发出命令时java,一切正常。此外,PATH变量的值与我在/etc/profile.

鉴于上述事实,存在冲突,我的理解有什么问题?

Zan*_*nna 6

当您通过显示管理器或 tty 登录到您的 x 会话时,/etc/profile是(通常 - 显然这是在您的情况下,尽管某些图形外壳不读取它)由您的外壳程序提供。在此之后,一个本地文件(我假设你正在使用bash这里)~/.bash_profile~/.bash_login~/.profile将采购,这里定义的任何环境变量将覆盖/etc/profile当前用户。此环境由您在会话中打开的任何 shell继承。这就是为什么我们可以在这些文件中定义环境变量,例如您的 PATH。

当您打开 gnome-terminal 时,默认情况下是启动一个非登录 shell,但它继承了您已经从登录 shell 或图形 shell 加载的用户环境。由于~/.bashrc是在启动交互式 shell(例如打开 gnome-terminal)时获取的,因此它可用于覆盖环境的某些元素(例如 PS1)。

(gnome-terminal 本身是一个应用程序,而不是一个 shell)