LoginSignup
2
3

More than 3 years have passed since last update.

[メモ] 私の環境におけるシェル設定スクリプトの設定関係メモ

Posted at

概要

シェル設定スクリプトについての(今のところ)個人用のメモです。
ZshとmacOSを使用する私の環境向けになっています。

私がシェルの起動スクリプトに求める要件

  1. 起動するssh-agentプロセスはユーザのログインごとに1つのみでなくてはなりません。
  2. PATH環境変数がどんどん長くなってはなりません。
    • シェルの中でシェルを起動した場合
    • sshした時?
  3. rbenv, pyenv等が正常に動作しなければなりません。
    • PATH環境変数において、(rbenv, anyenv, pyenv などの)shimsの優先度は、システムにデフォルトでインストールされている実行可能ファイルのそれよりも高くなければなりません。
    • PATH環境変数において、(rbenv, anyenv, pyenv などの)shimsの優先度は、Homebrewでインストールされた実行可能ファイルのそれより高くなければなりません。
  4. Homebrew によってインストールされたソフトウェアが正常に動作しなければなりません。
    • PATH環境変数において、Homebrewでインストールされた実行可能ファイルの優先度は、システムにデフォルトでインストールされている実行可能ファイルの優先度より高くなければなりません。
  5. 他のユーザに影響を及ぼしてはいけません。

私のmacにおける .zshrc .zprofile .zshenv .zlogin の実際の使い分け

  1. 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 を編集すると、他のユーザに影響を及ぼしてしまいます。
  2. ssh-agentは起動も終了もしません。
    ssh-agentは勝手に起動する1ため、シェル設定スクリプトで起動する必要がありません。
    同時に実行されるssh-agentはたかだか1プロセスであるため、ssh-agentを終了する必要もありません。

    Z shell の起動フロー

ログインシェルの時:

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zprofile
  4. ~/.zprofile
  5. /etc/zshrc
  6. ~/.zshrc
  7. /etc/zlogin
  8. ~/.zlogin

インタラクティブシェルの時:

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zshrc
  4. ~/.zshrc

※TODO: ソースを追記してください (cf. 脚注記法)
※TODO: インタラクティブシェルとは何か追記してください

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3