$ PATH変数アサーションをzshのどこに配置しますか?


110

私は大好きzshですが、自分$PATHや他の変数アサーションをどこに置くかわかりませんか?私はそれらがファイルの間に散在しており.zshrc .zprofile .bashrc .bash_profile、時には倍増していることを発見しました。

私は内部で何かを持つことを認識しbashたファイルは私が使用していると見てあまり意味がありませんzshが、場所を正確に私は置くべきであるrvmpythonnode私になど追加を$PATH

使用する必要がある特定のファイル(つまり、現在インストールに存在.zshenvないファイル)、現在使用しているファイルの1つですか、それとも重要ですか?

回答:


148

tl; drバージョン:使用 ~/.zshrc

また、manページ読んで、以下の違いを理解してください

~/.zshrc~/.zshenvおよび~/.zprofile


私のコメントについて

kevの回答に添付された私のコメントで

これは間違っているようです-/ etc / profileは、私が見つけたzshのドキュメントにはリストされていません。

これは部分的に正しくないことが判明:/etc/profile ありによって供給することzshただし、これzshは、「shまたはとして呼び出された」場合にのみ発生しkshます。これらの互換モード:

通常のzsh起動/シャットダウンスクリプトは実行されません。ログインシェルは/ etc / profileをソースとし、その後に$ HOME / .profileが続きます。ENV環境変数が呼び出し時に設定されている場合、$ ENVはプロファイルスクリプトの後に供給されます。ENVの値は、パス名として解釈される前に、パラメーター展開、コマンド置換、および算術展開の対象になります。[ man zshall、「互換性」 ]。

ArchWiki ZSHリンクは言います:

ログイン時に、Zshは次のファイルをこの順序でソースします。/
etc / profile
このファイルは、ログイン時にすべてのBourne互換シェルによってソースされます

これ/etc/profileは、ログイン時に常に読み取られることを意味zshします。ArchLinux プロジェクトでの経験はありません。ウィキはそのディストリビューションに対しては正しいかもしれませんが、一般的には正しくありません。この情報、zshのマニュアルページと比較する正しくなく、OS Xのzshには適用されないようです($PATHset inのパスは/etc/profile、私のzshセッションに到達しません)。



質問に対処するには:

$ PATHにrvm、python、nodeなどの追加を正確にどこに配置する必要がありますか?

一般的に、私は私をエクスポートするだろう$PATHから~/.zshrc、しかし、の読み取り持つことの価値zshallの manページを、特に「STARTUP / SHUTDOWN FILES」セクションには- ~/.zshrcのために読まれるインタラクティブやニーズに合わないかもしれシェル、 -あなたがしたい場合$PATHのためにzshあなたによって呼び出されたすべてのシェル(両方interactiveではない、両方loginであるなど)~/.zshenvは、より良いオプションです。

現在使用しているファイルの1つ(つまり、現在インストールに存在しない.zshenv)を使用する必要がある特定のファイルはありますか、それとも重要ですか?

起動時に読み込まれる多数のファイルがあり(リンクされたmanページを確認)、その理由があります-各ファイルには特定の場所があります(すべてのユーザーの設定、ユーザー固有の設定、ログインシェルの設定、すべてのシェルの設定、等)。
存在しないことを心配しないでください~/.zshenv。必要な場合は作成してください。読み込まれます。

.bashrcそして、.bash_profileされていないことで読みzsh、あなたが明示的にからそれらを調達しない限り、~/.zshrcまたは類似しました。との間の構文常に互換性があるわけbashzshはありません。.bashrc.bash_profileは両方とも、bash設定ではなくzsh設定用に設計されています。


3
完全な回答よりも多いsimontに感謝します。あなたが言うことを奇妙.bashrc.bash_profileによって読み込まれていないzsh私は、現在、私の持っているようrvmに加え$PATH.bashrc、そして私のpython中に加え.bash_profileて、両方がうまく追加されています。いずれに$PATH~/.zshrcても、他のすべてのzsh構成がそこに格納されているので、すべてのエクスポートをに移動します。認めざるを得ませんが、私はさまざまな種類のシェルに慣れていません。あなたが投稿したリンクを読んでいることから、私はインタラクティブなシェルを使用していると思いますが、念のためさらに読んでいきます...ありがとうございます!
stefmikhail

30

以下は、STARTUP / SHUTDOWN FILESセクションのzshマニュアルページのドキュメントです。

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

これから、ファイルの読み取り順序は次のようになります。

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

詳細については、こちらをご覧ください


18

私は同様の問題がありました(bashターミナルコマンドでは正しく機能していましたが、zshはコマンドが見つかりませんエラーを示しました)

解決:


以前に貼り付けていたものを〜/ .bashrcに貼り付けてください:

~/.zshrc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.