web-dev-qa-db-ja.com

zshで$ PATH変数アサーションを配置する場所

zshが大好きですが、$PATHおよびその他の変数アサーションをどこに配置すればよいかわかりませんか?それらはファイル.zshrc.zprofile.bashrc.bash_profileに散在しており、時には2倍になることがわかりました。

bashを使用しているので、zshファイル内に何かを置くことはあまり意味がありませんが、正確にrvmpythonnodeなどを$PATHに追加する必要があります。

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

88
stefmikhail

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、 "Compatibility" ]。

ArchWiki ZSH link はこう言います:

ログイン時に、Zshは次のファイルをこの順序で取得します。
/etc/profile
このファイルは、ログイン時にすべてのBourne互換シェルから取得されます。

これは、/etc/profileがログイン時にzshによって always read であることを意味します。ArchLinuxプロジェクトの経験はありません。 Wikiはそのディストリビューションに対して正しいかもしれませんが、 not は一般的に正しいです。情報isはzshのマニュアルページと比較して間違っており、OS Xのzshには適用されないようです($PATHのパスは/etc/profileに設定されていません。 zshセッション)。



質問に対処するには:

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

通常、$PATH~/.zshrcからエクスポートしますが、 zshall のマニュアルページ、特に「STARTUP/SHUTDOWN FILES」セクションを読む価値があります-~/.zshrc interactiveで読み取られますシェル。ニーズに合っている場合もあれば、そうでない場合もあります-あなたが呼び出すzshシェルごとに$PATHが必要な場合(interactiveとそうでない、両方ともloginとそうでない両方)、~/.zshenvがより良いオプションです。

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

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

.bashrcおよび.bash_profileは、~/.zshrcまたは同様のものから明示的にソースしない限り、zshによってnotによって読み取られます。 bashzshの間の構文は、 not 常に互換性があります。 .bashrc.bash_profileは両方とも、bash設定ではなく、zsh設定用に設計されています。

123
simont

これは、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

詳細情報を取得できます こちら

26
jor

私は同様の問題を抱えていました(bash端末コマンドでは正しく動作していましたが、zshはコマンドが見つかりませんというエラーを示しました)

解決:


以前に〜/ .bashrcに貼り付けていたものは何でも貼り付けてください

~/.zshrc
13
abe312