2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SSHで繋いだホストで.zshrcが読み込まれていない

Posted at

問題

SSHコマンドを使って、リモートホストで直接コマンドを実行した場合、.zshrc が読み込まれていませんでした。

.zshrc
PATH=/bin:$PATH
$ ssh example.com 'echo $PATH'

/usr/local/sbin:/usr/local/bin  # ここに/bin が無い

調べたところSSHで繋いだ場合には login shell と呼ばれる状態で起動しており、 login shell.zshrc を読みに行きません。

調査方法

色々調べたところ .zprofile に書くと良い、というのを見ましたが、書き込んでも変化はありませんでした。

下記にかなり詳細な読み込み順序が書かれていました。

この図によるとSSHで繋がれたシェルは「login shell」かつ「non interactive shell」で黄色い線のように見えるのですが、ワンライナーの場合にはどうやら違うらしく、青い線のようです。

そこで ~/.zshenv に書き込みました。

.zshrc
PATH=/bin:$PATH
$ ssh example.com 'echo $PATH'

/bin:/usr/local/sbin:/usr/local/bin  # /bin が出てきた

なお /etc/zprofile のようなファイルが呼ばれるかどうかについてはインストール済みの環境で man zsh して FILES を確認すると良いとのことでした。
確認すると実際には /etc/zprofile ではなくもう一つ下の /etc/zsh/zprofile

下記はその例。

$ man zsh | grep -A20 FILES

FILES
       $ZDOTDIR/.zshenv
       $ZDOTDIR/.zprofile
       $ZDOTDIR/.zshrc
       $ZDOTDIR/.zlogin
       $ZDOTDIR/.zlogout
       ${TMPPREFIX}*   (default is /tmp/zsh*)
       /etc/zsh/zshenv
       /etc/zsh/zprofile
       /etc/zsh/zshrc
       /etc/zsh/zlogin
       /etc/zsh/zlogout    (installation-specific - /etc is the default)

解決方法

ということでSSHのワンライナーでも呼ばれる ~/.zshenv に .zshrc を呼ばれるように書いておきました。

~/.zshenv
if [ -f ~/.zshrc ]; then
	. ~/.zshrc
fi

参考

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?