web-dev-qa-db-ja.com

明確化再:ZSH起動/シャットダウンファイル

MacOS Catalinaにアップグレードしたところ、新しいシェルはZSHです。ですから、これは新たなスタートなので、bashの場合と同じように、エイリアスや関数などを使用してシェル環境をセットアップしようとしています。 documentation でこれに遭遇したとき、私は何がどこに行くのかを理解しようとしています

次に、コマンドは$ZDOTDIR/.zshenvから読み取られます。シェルがログインシェルの場合、コマンドは/etc/zprofileから読み取られ、次に$ZDOTDIR/.zprofileから読み取られます。次に、シェルがインタラクティブである場合、コマンドは/etc/zshrcから読み取られ、次に$ZDOTDIR/.zshrcから読み取られます。最後に、シェルがログインシェルの場合、/etc/zlogin$ZDOTDIR/.zloginが読み取られます。

紛らわしいビット...

  • ログインシェルの場合は、/etc/zprofileから読み取り、次に$ZDOTDIR/.zprofileから読み取ります。
  • 最後に、シェルがログインシェルの場合、/etc/zlogin$ZDOTDIR/.zloginが読み取られます。

MacにSSHで接続すると、ログインシェルになります。それで、それを構成する必要があるので、どのファイルを変更する必要がありますか(または変更する必要がありますか)?その質問に答えるのに役立つと思いますが、おそらく.zprofile.zloginの違いを理解するのに役立つでしょう。したがって、ここでのガイダンスはすばらしいでしょう。

1
Allan

*profileファイルと*loginファイルは、同じ条件で読み取られます。シェルがログインシェルである場合(およびno_rcsなどのオプションで呼び出されない場合)のみです。 *rcファイルとは異なる順序で呼び出されるため、マニュアルにはそれらが個別にリストされています。

*profileという名前はshに由来し、 Bourne Shell (ksh、bash、dashなどはほとんどが追加機能を備えた再実装です)。 *loginという名前は csh に由来します。 Zshはshに似ていますが、両方の機能を備えているため、両方の名前をサポートしているのではないかと思います。

多くの場合、*profile*loginのどちらを使用してもかまいません。ただし、*profileファイルには*rcの前に読み取られるという利点があるため、*rcの設定に依存する*profileコンテンツがある場合(たとえば、.zshrcの場合SOMECODE] _は、.zprofile$PATHに追加するディレクトリにあるプログラムを呼び出します。*profileではなく*loginを使用する必要があります。

したがって、ログイン時の構成(通常はほとんどの場合環境変数)を~/.profileに入れ、対話型の構成(プロンプト、完了、キーバインディング、エイリアスなど)を~/.zshrcに入れます。他のスタートアップファイルが必要になることはめったにありません。