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

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

根据答案什么是登录 shell 和非登录 shell?在 Ask Ubuntu 上,GNOME 终端是一种非登录 shell。正如这本优秀书中所指出的,Fedora 和 Red Hat Enterprise Linux 实用指南,第六版

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

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

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

答案1

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

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

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

答案2

短:无

long:gnome-terminal 是一个终端。您在终端中运行 shell。您可以在终端中运行任一类型的 shell(登录或不登录)(尽管 gno​​me-terminal 比其他终端更难)。

进一步阅读:

答案3

试试这个,它在 BASH 中有效。

shopt -q login_shell && echo " <<< It's a Login Shell >>> " || echo " <<< It's \"NOT\" a Login Shell >>> "

顺便说一句,Gnome Terminal 只是一个使用 shell(更具体地说是 BASH)的终端模拟器(应用程序)。

相关内容