为什么 VNC bash shell 和远程 SSH shell 行为不同?

为什么 VNC bash shell 和远程 SSH shell 行为不同?

登录 VNC 桌面并打开终端时,仅调用 HOME bashrc 文件执行,但登录远程远程 SSH 时,它将调用 HOME bashrc/bash 配置文件,还会调用 LDAP bashrc 和 bash 配置文件。

为什么启动 shell 时它的行为不同。

答案1

bash识别三种 shell 状态:

  • 登录 shell - 通过例如登录到服务器直接调用的 shell 实例。 ssh 或文本控制台
  • 交互式 shell - 任何可以键入命令的 shell,例如。 shell 在图形终端中启动。登录 shell(通常)也是交互式 shell。
  • 非交互式 shell - 这通常是从某个程序内调用 shell 来运行另一个程序或命令。顾名思义,在非交互式 shell 中,不与用户进行交互。例如,如果您使用 ssh 在远程计算机上仅运行单个命令(例如ssh host.domain ls -l /etc),那么您将隐式调用远程计算机上的非交互式 shell,而该 shell 会依次运行该命令,然后退出。

启动文件如何工作:

  • A登录外壳/etc/profile(这是所有用户的全局文件)执行命令,然后查找 files .bash_profile.bash_login或者 .profile按该顺序在单个用户的主目录中查找,并从首先找到的文件中执行命令。通常,默认情况下,新创建的帐户上仅.profile存在该文件,并且默认情况下它还包含执行文件内容的命令.bashrc。但是,您可以从文件.bashrc中删除要运行的代码.profile,也可以使用所需的命令创建其他两个文件中的任何一个,然后.profile就不会运行。
  • 一个交互的(但未登录) shell 从/etc/bash.bashrc(对于所有用户来说是全局的)执行命令,然后从.bashrc单个用户主目录中的文件执行命令
  • 非交互式炮弹开始本地(即从程序中,或通过bash在终端窗口中键入)不要运行任何这些文件
  • 非交互式炮弹开始来自网络(例如,在上面的示例中,您通过 ssh 在远程计算机上运行命令).bashrc仅从用户主目录中的文件执行命令。但是,默认.bashrc文件通常在开头包含一段代码,如果 shell 是非交互式的,该代码将停止进一步执行。

具体情况还有一些微妙之处,但基本上都是按照上面的方式工作的。

当您通过 VNC 连接并打开终端时,您正在执行交互式非登录 shell。当您通过 ssh 登录时,您正在执行登录 shell。故有差别。

相关内容