
私は最近、ターミナルプロンプトでGNOMEディスプレイマネージャにログイン(getty?)するように切り替えました。それ〜らしい.profile
GDMは、ユーザーのログインシェル設定(私の場合はZsh)に関係なく、常に読み取ります。なぜそんなことですか?ハードコーディングされていると思います。彼らの起源しかし、見つかりません。彼らはなぜこのようなことをするのですか?このソフトウェアはBourneシェルの特定の機能を使用しますか?
GDMとgettyを同時に(代わりに)使用したい場合は、すべてを同期する必要があるため、これはお勧めでき.profile
ません.zprofile
。中国の購入には.profile
あまりありません.zprofile
(以前.bashrc
は中国で購入しようとしたときに互換性の問題がありました.zshrc
)。 Bash呼び出しは/bin/sh
POSIXモードで動作すると思いますが、それがすべてのトラップを避けるかどうかはわかりません。
私たちのために、私は最新のArch Linuxを使用しており、Waylandを使ってGNOMEを実行しています(したがって、Xsession
関連するスクリプトがあってはいけません)。
答え1
あなたの質問は.bashrc
関係ありません。.profile
互換性のあるすべてのシェルとの互換性が必要ですsh
が、プロセスは.bashrc
Bashに固有のものであり、通常は他のシェルから選択しないでください。
一般的にシェル間で共有したい内容を入れて.profile
、する別のシェルの起動ファイルからインポートします(もちろん、既定では既にこれを実行していない限り)。
明らかに、他のシェルで異なる動作をするコードを避ける必要があります(たとえば、Zshでは見つからない参照は問題ありませんが、Bourne互換シェルでは問題があります)。
質問の「理由」部分は、.profile
シェルで実行するプログラム(または「従来の」シェルと呼ばれる必要があるかもしれません)だけでなく、GUIセッションで実行されているプログラムで設定を使用できるようにすることです。 GUIセッションを「非伝統的な」シェルとして使用)
答え2
ZSHエミュレーションを使用して、bashとzshの間の非互換性の問題を解決.profile
できます。.zprofile
以下を次の項目に追加します.zprofile
。
最新のzshバージョンを使用している場合:
# Load .profile (but emulating sh to avoid bash/zsh incompatibilities) emulate sh -c 'source ~/.profile'
以前のzshバージョンを使用している場合:
emulate sh . ~/.profile emulate zsh