bauer's diary

凡人の凡人による凡人のための備忘録

dotfiles整理 その2:zshrcから分割した設定ファイルが読み込まれない問題への対処

kitakitabauer.hatenablog.com
前回の記事はこちら。
この構成に変えたあと、.zprofileに記述した部分が読み込まれなくなりました。

ターミナルアプリで起動されるのは、ログインシェルではなく、インタラクティブシェル

という事実を下記記事にて知りました…!
qiita.com

自分はターミナルアプリにiTerm2を使っており、下記の通りbrewインストールしたzshを起動しています。
f:id:kitakitabauer:20160913180649p:plain

前回の記事で「zshが起動時に読み込むファイルとその順番」について記述しましたが、
ログインシェルでないと、$ZDOTDIR/.zprofile は読み込まれません。

かといって、"Send text as start: "に "source $HOME/.zprofile" を入れて毎回読み込むのも、インタラクティブシェルのときに毎回読み込むことになるので、zsh標準の仕様と外れるので気持ち悪いし、セッションを起動するたびにそのコマンドが毎回出力されるのも嫌です。

ログインシェル変更

ターミナルアプリ上ではなく、ローカル設定からzshを指定するようにして対応することとします。
(なので、iTerm上の設定は"Command"→"Login shell"に変更しておきます)

まずは現在のインストールシェル一覧を確認
$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/etc/shellsに、brewインストールされたzshのパスを追加

デフォルトインストールされたzshはバージョンが少し古いため、brewインストールしたzshのパスをroot権限で追加します。

$ sudo vi /etc/shells

…
/bin/zsh
/usr/local/bin/zsh   # 追加
ログインシェル変更

デフォルトのシェルを先ほど追加したzshに変更します。
下記コマンドによって、/etc/shellsの一番最後に記述されたzshに変更します。

$ chsh -s "$(command -v zsh)" "${USER}"
確認

読み込んだ順番を確認するために、それぞれの設定ファイルにechoを入れたあと、
ターミナルアプリの別セッションを立ち上げると、

~/.zshenv
~/.zsh/.zshenv
~/.zsh/.zprofile
~/.zsh/.zshrc

問題なし!


尚、ログインシェル変更の方法は色々あるらしいです。
rcmdnk.github.io