💎

RubyMineでfishを起動したときに出るエラーの解決方法

2024/02/27に公開

結論

~/.cache/JetBrains/RemoteDev/dist/51e15e8bd930f_RubyMine-241.12662.50/plugins/ruby/rb/terminal/asdf_starter.sh
set asdf_bin_root $(dirname $RUBY_VERSION_MANAGER_PATH)
source "$asdf_bin_root/../asdf.fish"
asdf shell ruby $RUBY_VERSION_MANAGER_DISTRIBUTION_ID

エラーを起こしているスクリプトをbash用からfish用の設定に書き換えます。

上記方法は下記のサイトを参考にしました。
https://youtrack.jetbrains.com/issue/RUBY-27517/Terminal-fish-shell-prints-an-error-for-ASDF-startup-script#focus=Comments-27-8689988.0-0

経緯

RubyMineのターミナルでfishを使用している際、fish起動時に下記のようなエラーが起きていました。

~/.cache/JetBrains/RemoteDev/dist/51e15e8bd930f_RubyMine-241.12662.50/plugins/ruby/rb/terminal/asdf_starter.sh (line 1): Unsupported use of '='. In fish, please use 'set asdf_bin_root $(dirname $RUBY_VERSION_MANAGER_PATH)'.
asdf_bin_root=$(dirname $RUBY_VERSION_MANAGER_PATH)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

RubyMineがruntime管理ツールのasdfを起動させる際にfishではサポートされていない演算子を呼び出してエラーになっているようです。
↓ asdfはコチラ
https://github.com/asdf-vm/asdf

エラーになっているファイルの中身はこうです。

~/.cache/JetBrains/RemoteDev/dist/51e15e8bd930f_RubyMine-241.12662.50/plugins/ruby/rb/terminal/asdf_starter.sh
asdf_bin_root=$(dirname $RUBY_VERSION_MANAGER_PATH)
source "$asdf_bin_root/../asdf.sh"
asdf shell ruby $RUBY_VERSION_MANAGER_DISTRIBUTION_ID

1行目ではエラーに書かれている通り = が使われています。これはfishでは利用できません。
また、2行目では "$asdf_bin_root/../asdf.sh" という.shのファイルを呼び出しています。
この.shはBash,Zsh,Kshでの動作を想定しており、fishで呼び出すと構文エラーなど起こります。

これらのファイルが実行されるのは、おそらくRubyMineがターミナルをfishで動作させることを想定していないためと推測しています。
RubyMineではターミナルで実行する初期シェルのパスを指定できるのですが、シェルの種類を設定したり区別するような設定はありませんでした。

そのため、fish上で.shファイルが実行されて上記の非サポート演算子エラーが発生していたものと考えられます。

対策としては、冒頭にも書いた通り、エラーになっている箇所をfishでの書き方に直し、sourceで呼び出すスクリプトもfish用のものに置き換えればエラーは発生しなくなりました。

Discussion