回答によるとログインシェルと非ログインシェルとは何ですか?Ask Ubuntuでは、GNOMEターミナルは非ログインシェルです。この素晴らしい本が指摘するように、FedoraおよびRed Hat Enterprise Linux実用ガイド、第6版:
対話型の非ログインシェルは、 ~/.bashrc ファイルのコマンドを実行します。デフォルトの ~/.bashrc ファイルは /etc/bashrc を呼び出します。
したがって、/etc/profile
非ログインシェルでは処理されません。しかし、PATH
変数にJavaホームパスを追加し、GNOME端末を使用してコマンドを実行したときにjava
すべてがうまく機能することがわかりました。また、この変数の値はPATH
で定義した値と同じです/etc/profile
。
上記の事実を総合してみると葛藤がありますが、私が理解した部分に問題があるのでしょうか?
答え1
/etc/profile
(通常、一部のグラフィックシェルでは読みませんが、明らかにあなたの場合です)は、ディスプレイマネージャまたはttyを介してxセッションにログインすると、シェルプログラムによって選択されます。その後、ローカルファイル(ここではbashを使用すると仮定)をインポートするか、~/.bash_profile
ここで定義されているすべての環境変数を現在のユーザーに対して上書きします。この環境は~/.bash_login
~/.profile
/etc/profile
遺伝学セッションで開かれたシェルを通して。だから私たちは環境変数の定義たとえば、これらのファイルのPATHです。
gnome-terminalを開くと、デフォルトでは非ログインシェルが起動しますが、ログインシェルまたはグラフィックシェルからロードされたユーザーエクスペリエンスを継承します。対話型シェルを起動するとき(gnome ターミナルを開くなど)を取得するので、上書きする~/.bashrc
ために使用できます。一部環境要素(例:PS1)
(gnome-terminal自体はシェルではなくアプリケーションです)
答え2
短い:なし
長い: gnome-terminal は端末です。端末でシェルを実行します。ターミナルで2つのタイプのシェル(ログインしているかどうかにかかわらず)を実行できます(gnome-terminalは他のターミナルよりも難しい)。
追加資料:
答え3
これを試してみてください。 BASHで動作します。
shopt -q login_shell && echo " <<< It's a Login Shell >>> " || echo " <<< It's \"NOT\" a Login Shell >>> "
ところで、Gnome Terminalはシェル(より具体的にはBASH)を使用するターミナルエミュレータ(アプリケーション)です。