web-dev-qa-db-ja.com

.zshenv、.zshrc、.zlogin、.zprofile、.zlogoutには何を入れるべきですか?

zshのさまざまな起動ファイルに含めるべき、または含めるべきではないものについてのガイドラインを探しています。

私はこれらのファイルの調達の順序と、それらが供給される条件を理解していますが、それぞれに何をすべきかはまだはっきりしていません。

177
kjo

以下は、各ファイルに含まれる傾向のある非排他的なリストです。

  • .zshenvは常にソースであるため、他のプログラムで使用できるエクスポートされた変数が含まれていることがよくあります。たとえば、$PATHには$EDITOR$PAGER.zshenvが設定されることがよくあります。また、$ZDOTDIR.zshenvを設定して、残りのzsh構成の代替の場所を指定できます。
  • .zshrcはインタラクティブなシェル構成用です。 setoptコマンドとunsetoptコマンドを使用して、インタラクティブシェルのオプションを設定します。シェルモジュールの読み込み、履歴オプションの設定、プロンプトの変更、zleと補完の設定などもできます。インタラクティブシェルでのみ使用される変数も設定します(例:$LS_COLORS)。
  • .zloginは、ログインシェルの開始時に提供されます。このファイルは、Xをstartxを使用して起動するためによく使用されます。一部のシステムは起動時にXを起動するため、このファイルは必ずしも非常に役立つとは限りません。
  • .zprofileは基本的に.zloginと同じですが、.zshrcの直後ではなく直前にソースされる点が異なります。 zshのドキュメントによると、 ".zprofileは、kshファンの` .zlogin 'の代替として意図されています。この2つを一緒に使用することは意図されていませんが、これは確かに必要に応じて実行します。」
  • .zlogoutは、端末のクリアとリセットに使用されることがあります。

各ファイルに何が含まれるべきかをよりよく理解するには、 ランダムなGithubユーザーの設定ファイル を実行する必要があります。

201
user26112

私の意見では、各ファイルに含める必要がある/含まないべきリストを以下に示します。

.zshenv

[毎回読む]

このファイルは常にソースであるため、頻繁に更新する必要がある環境変数を設定する必要があります[〜#〜] path [〜#〜](またはそれに対応するpath)良い例です。おそらくセッション全体を再起動して更新する必要はないでしょう。そのファイルに設定することにより、ターミナルエミュレーターを再度開くと、[〜#〜] path [〜#〜]値が更新された新しいZshインスタンスが開始されます。

ただし、Zshを起動して単一のコマンドを実行する場合でも、このファイルはreadであることに注意してください-cオプション)、makeなどの別のツールによっても。標準コマンドのデフォルトの動作を変更しないように十分に注意する必要があります(たとえば、エイリアスを設定することによって)一部のツールが壊れる可能性があります。

.zprofile

[ログイン時に読み取る]

私は個人的にそのファイルを_.zshenv_のように扱いますが、一度設定する必要のあるコマンドや変数、または頻繁に更新する必要のないコマンド/変数については

  • ツールを構成するための環境変数(コンパイルのフラグ、データフォルダーの場所など)
  • コマンドを実行する構成(SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))"など)は、実行に時間がかかる場合があります。

このファイルを変更する場合は、ログインシェルを実行して構成の更新を適用できます。

_exec zsh --login
_

.zshrc

[インタラクティブなときに読む]

interactive usageにのみ必要なすべてをここに配置します:

  • 促す、
  • コマンド補完、
  • コマンド修正、
  • コマンドの提案、
  • コマンドの強調表示、
  • 出力カラーリング、
  • エイリアス、
  • キーバインド、
  • コマンド履歴管理、
  • その他のその他のインタラクティブツール(auto_cd、manydots-magic)...

.zlogin

[ログイン時に読み取る]

このファイルは_.zprofile_に似ていますが、_.zshrc_の後に読み取られます。シェルは.zlogin実行時に完全にセットアップされていると考えることができます

そのため、シェルの動作を変更しない外部コマンド(ログインマネージャーなど)を起動するために使用します。

.zlogout

[ログアウト時に読み取る] [ログインシェル内]

ここで、端末またはログイン時に設定されたその他のリソースをクリアできます。

設定を配置する場所を選択する方法

  • コマンドが非対話的に実行する必要がある場合:_.zshenv_
  • 新しいシェルごとに更新する必要がある場合:_.zshenv_
  • 完了するまでに時間がかかる可能性があるコマンドを実行する場合:_.zprofile_
  • interactive usageに関連している場合:_.zshrc_
  • シェルが完全にセットアップされたときに実行されるコマンドの場合:_.zlogin_
  • リソースを解放する場合ログイン時に取得:_.zlogout_
40
Damien Flament

ssh-agent.zshenvを呼び出さないでください。これにより、lessコマンドでテキストファイルが表示されなくなりました。おそらく、そのオプションがPreztoによってカスタマイズされたためです(export LESS='-F -g -i -M -R -S -w -X -z-4'.zprofile)。

0
egpbos