VNC bashシェルとリモートSSHシェルが異なる動作をするのはなぜですか?

VNC bashシェルとリモートSSHシェルが異なる動作をするのはなぜですか?

VNCデスクトップにログインしてターミナルを開くと、HOME bashrcファイルのみが呼び出され、実行されますが、リモートSSHにログインするとHOME bashrc / bash設定ファイルが呼び出され、LDAP bashrcも呼び出されます。とbash設定ファイル。

シェルを起動すると、なぜ動作が異なるのですか?

答え1

bash3 つのシェルの状態を認識します。

  • ログインシェル - たとえば、サーバーにログインして直接呼び出されるシェルインスタンスです。 SSHまたはテキストコンソール
  • 対話型シェル - コマンドを入力できるすべてのシェル。シェルはグラフィックターミナルから始まります。ログインシェルは(通常)対話型シェルでもあります。
  • 非対話型シェル - 通常、他のプログラムまたはコマンドを実行するためにプログラム内で呼び出されるシェルです。名前が示すように、非対話型シェルではユーザーとの対話はありません。たとえば、sshを使用してリモートシステムで単一のコマンド(たとえばssh host.domain ls -l /etc)のみを実行すると、リモートシステムで非対話型シェルを暗黙的に呼び出してコマンドを実行してから終了します。

スタートアップファイルの仕組み:

  • ログインシェル/etc/profile(すべてのユーザーのためのグローバルファイルである)でコマンドを実行し、そのファイルを検索するか、 .bash_profile個々のユーザーのホームディレクトリを順番に調べて、最初に見つかったファイルからコマンドを実行します。通常、新しく作成されたアカウントにはデフォルトでこのファイルのみが存在し、デフォルトでファイルの内容を実行するコマンドも含まれています。ただし、ファイルから実行したいコードを削除するか、必要なコマンドを使用して他の2つのファイルのいずれかを生成すると、実行されません。.bash_login.profile.profile.bashrc.bashrc.profile.profile
  • 一つインタラクティブ(しかしログインしていません)シェルは/etc/bash.bashrc(すべてのユーザーに対してグローバル)コマンドを実行し、.bashrc個々のユーザーのホームディレクトリにあるファイルからコマンドを実行します。
  • 非対話型殻が始まる地元の(つまり、プログラム内またはbashターミナルウィンドウに入力して)これらのファイルを実行しないでください
  • 非対話型殻が始まるWebから(たとえば、上記の例では、sshを介してリモートシステムでコマンドを実行しています。).bashrcユーザーのホームディレクトリにあるファイルからのみコマンドを実行します。ただし、デフォルト.bashrcファイルには通常、シェルが非対話型の場合に追加の実行を停止するコードが最初に含まれています。

状況に微妙な微妙さがありますが、基本的にすべてが上記のように動作します。

VNCを介して接続して端末を開くと、ログインではなく対話型シェルが実行されます。 SSH経由でログインすると、ログインシェルが実行されます。だから違いがあります。

関連情報