概要
シェル設定スクリプトについての(今のところ)個人用のメモです。
ZshとmacOSを使用する私の環境向けになっています。
私がシェルの起動スクリプトに求める要件
- 起動する
ssh-agent
プロセスはユーザのログインごとに1つのみでなくてはなりません。 -
PATH
環境変数がどんどん長くなってはなりません。- シェルの中でシェルを起動した場合
- sshした時?
- rbenv, pyenv等が正常に動作しなければなりません。
-
PATH
環境変数において、(rbenv
,anyenv
,pyenv
などの)shimsの優先度は、システムにデフォルトでインストールされている実行可能ファイルのそれよりも高くなければなりません。 -
PATH
環境変数において、(rbenv
,anyenv
,pyenv
などの)shimsの優先度は、Homebrewでインストールされた実行可能ファイルのそれより高くなければなりません。
-
- Homebrew によってインストールされたソフトウェアが正常に動作しなければなりません。
-
PATH
環境変数において、Homebrewでインストールされた実行可能ファイルの優先度は、システムにデフォルトでインストールされている実行可能ファイルの優先度より高くなければなりません。
-
- 他のユーザに影響を及ぼしてはいけません。
私のmacにおける .zshrc .zprofile .zshenv .zlogin の実際の使い分け
-
PATH
環境変数の設定は.zprofile
で行います。-
.zshrc
は、インタラクティブシェル用の設定を行うところで、CUI広範に広く影響を及ぼしたいPATH
環境変数の設定は.zshrc
で行うのに向いていません。 -
.zshenv
も.zshrc
も、Zsh中でZshを実行するごとに実行されるため、ここでPATH
環境変数に追記するとPATH
環境変数がどんどん成長してしまいます。 -
.zshenv
については、macOS の/etc/zprofile
が (eval $(path_helper -s)
によって)PATH
環境変数に優先度の高いパスを追加するため、ここで優先度の高いPATH
環境変数の設定は行ってはいけません。 -
.zlogin
は、.zshrc
での設定に依存しログイン時に一回だけ行うといいような処理(おそらくfortune
の実行や新着メールの表示など。TODO: 要出典)に向いています。 - どこで
PATH
環境変数を設定しても、そのPATH
環境変数は当該のログインシェルの外には影響を及ぼせないと言う問題があります。 -
/etc/zshenv
/etc/zprofile
/etc/zlogin
/etc/zshrc
を編集すると、他のユーザに影響を及ぼしてしまいます。
-
-
ssh-agentは起動も終了もしません。
ssh-agent
は勝手に起動する1ため、シェル設定スクリプトで起動する必要がありません。
同時に実行されるssh-agent
はたかだか1プロセスであるため、ssh-agent
を終了する必要もありません。Z shell の起動フロー
ログインシェルの時:
/etc/zshenv
~/.zshenv
/etc/zprofile
~/.zprofile
/etc/zshrc
~/.zshrc
/etc/zlogin
~/.zlogin
インタラクティブシェルの時:
/etc/zshenv
~/.zshenv
/etc/zshrc
~/.zshrc
※TODO: ソースを追記してください (cf. 脚注記法)
※TODO: インタラクティブシェルとは何か追記してください