fish 3.1.0 iTerm起動時にエラーが出る
問題
iTermを再起動した所、以下のエラーが出てきた。
~/.config/fish/config.fish (line 1):
rbenv init - | source
^
in command substitution
called on line 36 of file ~/.config/fish/config.fish
from sourcing file ~/.config/fish/config.fish
called during startup
~/.config/fish/config.fish: Unknown error while evaluating command substitution
from sourcing file ~/.config/fish/config.fish
called during startup
おそらく、~/.config/fish/config.fish
で設定している eval (rbenv init - | source)
のところでエラーが出ている。
下記は原因がわかった上で実行しているが、whichを実行しても何も返ってこない。
$ which fish
# 期待結果 /usr/local/bin/fish
解決策1
~/.config/fish/config.fish
の最初に、パスを追加する。
set PATH /usr/local/bin $PATH
追加する理由としては、パスを確認した時に上記のものが入っていないから。
$ echo $PATH
/usr/bin /bin /usr/sbin /sbin
しかしながら、これはやや強引な気もするのでよくないかも。
解決策2
iTermの環境設定を修正する。
iTerm > Preferences > Profiles > General > Commond に、Commondで/usr/local/bin/fish
を設定している。これを、
/usr/local/bin/fish -l
に変更する。設定したらiTermを再起動する。
ちゃんと which
も返ってくるようになるよ。echo
の結果もちゃんとしてる。
$ echo $PATH
/Users/{ユーザ名}/.rbenv/shims /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/share/dotnet ~/.dotnet/tools
ちなみに -l
オプションは「ログインシェルとして起動する」と言う意味。他のオプションなど気になる人は公式で。
参考:fish - the friendly interactive shell — fish-shell 3.1.0 documentation
解決策1よりこちらの方がいいかもしれない。
原因
前日にHomebrewでインストールしたものをupdateしたせいかもしれない。その時に、fishのバージョンが3.1.0
に上がったと思われる。
fish の3.1.0
は2020/2/12にリリースされていた。詳しくはリリースノートからどうぞ。
いつから-l
オプションが必要になったかは、issueのコメントを読むとどうやら、3.1.0
になってからのようだ。Fish v3.0.2では、ログインシェルであるかに違いはみられないが、Fish v3.1.0では /usr/local/bin
をはじめとして他のPATHも差があるみたい。
参考:fish 3.1.0 does not include /usr/local/bin in the PATH · Issue #6594 · fish-shell/fish-shell
余談
雑に下のエラー文で検索したら
~/.config/fish/config.fish: Unknown error while evaluating command substitution from sourcing file ~/.config/fish/config.fish
ヒットした記事がこちら。
RubyMineのターミナルが壊れた話 - @ledsun blog
同じところでエラーが出てて、ほんとにありがてえ…。
参考
- RubyMineのターミナルが壊れた話 - @ledsun blog
- After update to 3.1.0 /usr/local/bin has disappered from PATH. Why? · Issue #6903 · fish-shell/fish-shell
- fish 3.1.0 does not include /usr/local/bin in the PATH · Issue #6594 · fish-shell/fish-shell
- fish - the friendly interactive shell — fish-shell 3.1.0 documentation