zshrcとzprofileについて

あるとき.zprofileというファイル名を見かけて、そんなファイルあるのかなと疑問に思い、自分のターミナルで調べたら確かにあった。

中身を見たら、nodeのPATHだけ書いてあった。

export PATH=$HOME/.nodebrew/current/bin:$PATH

前にrbenvをインストールしたときは.zshrcにPATHを追加したので、
nodeも.zshrcに書いたと思ったら.zprofileにPATHを書いていた。

記事をいくつか見ると.zshrcに書くパターンと.zprofileに書くパターンの半々。

どっちに書けばいいんやら.....


使い分けは?


bashの記事引用、

.bash_profile
基本的に デフォルトのまま一切いじらない
端末操作以外でも設定しておく必要がある環境変数のみ設定する
.bashrc
.bash_profileに書いた設定以外はすべてここに書く
ほとんどの人は、 設定は全部.bashrcに書けば良い

qiita.com


zshの記事でも

zprofile
ログインシェルの場合に1度だけ読み込まれる。
つまりインタラクティブシェルやシェルスクリプトでは不要だけどログインシェルの時だけ必要な設定をする場合にはここに記述するのが良い。
zshrc
ログインシェルとインタラクティブシェルの場合だけ読み込まれる。
シェルスクリプトでは不要な場合に記述する。
一般的に紹介されている記事ではこの設定ファイルにいろいろ記述することが多い。
困ったらここに記述してみて問題が出てきたらちゃんと場所を考えるという運用でも問題ないかもしれない。

qiita.com

ということらしい。

以上を参考にして、上記のnodeのPATHも.zshrcに書き換えたが問題なくnode.jsは動いた。
$PATHを見ても通ってる。

~ % echo $PATH
/Users/gallardo/.nvm/versions/node/v14.12.0/bin:/Users/gallardo/.rbenv/shims:/Users/gallardo/.rbenv/bin:/Users/gallardo/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin


詳細

それぞれの違いは?


  • シェルの種類
1・ログインシェル
  コマンドラインを起動したとき、サーバにログインしたときに立ち上がるシェルのこと
  対話形式で入力する
2・インタラクティブシェル
  コマンドラインで bash とか zsh と入力すると起動するシェルのこと
  対話形式で入力する
3・シェルスクリプト
  シェルによるプログラミングファイルを作成して実行すること


  • 役割
.zshenv
ログインシェル、インタラクティブシェル、シェルスクリプト、どれでも常に必要な設定を定義する
zsh が起動して、必ず最初に読み込まれる設定ファイル
対話形式のシェル設定をここですると、シェルスクリプト誤作動の原因になるため注意する
影響範囲が大きいので記述は必要最低限にするべき
.zprofile
ログインシェルに必要な設定だけを記述する
zshenv の次に読み込まれる設定ファイル
zsh ログイン時の一回だけ読み込まれる
.zshrc
ログインシェル、インタラクティブシェルの場合に読み込まれる
.zlogin
ログインシェルに必要な設定だけを記述する
最後に読み込まれる
役割は .zprofile とほぼ一緒。混乱を避けるため併用しないこと
.zlogout
exit コマンドで zsh を抜けたときに読み込まれる

suwaru.tokyo



環境構築やLinux(Unix)関係は特に苦手だと感じるので少しずつ慣れていきたい。