GNOMEディスプレイマネージャが常に.profileを読むのはなぜですか?

GNOMEディスプレイマネージャが常に.profileを読むのはなぜですか?

私は最近、ターミナルプロンプトでGNOMEディスプレイマネージャにログイン(getty?)するように切り替えました。それ〜らしい.profileGDMは、ユーザーのログインシェル設定(私の場合はZsh)に関係なく、常に読み取ります。なぜそんなことですか?ハードコーディングされていると思います。彼らの起源しかし、見つかりません。彼らはなぜこのようなことをするのですか?このソフトウェアはBourneシェルの特定の機能を使用しますか?

GDMとgettyを同時に(代わりに)使用したい場合は、すべてを同期する必要があるため、これはお勧めでき.profileません.zprofile。中国の購入には.profileあまりありません.zprofile(以前.bashrcは中国で購入しようとしたときに互換性の問題がありました.zshrc)。 Bash呼び出しは/bin/shPOSIXモードで動作すると思いますが、それがすべてのトラップを避けるかどうかはわかりません。

私たちのために、私は最新のArch Linuxを使用しており、Waylandを使ってGNOMEを実行しています(したがって、Xsession関連するスクリプトがあってはいけません)。

答え1

あなたの質問は.bashrc関係ありません。.profile互換性のあるすべてのシェルとの互換性が必要ですshが、プロセスは.bashrcBashに固有のものであり、通常は他のシェルから選択しないでください。

一般的にシェル間で共有したい内容を入れて.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
    

引用:Zsh は ~/.profile をクリックしません。

関連情報