Edited at

fishでbashスクリプトを読み込む

fishでは通常bashファイルを読み込めませんが、一方でどうしても読み込まないといけないという場合があります(ROSの環境構築等)。そういったときにどうするかということを書きます。


TL;DR

bassを使うのがおすすめです。


1. 起動シェルをbashにする

「fish bashrc」等で検索するとこの方法がよく見つかります。

起動シェルはbashにし、.bashrcに以下のように記入すれば、something.bashを読み込みつつ、自動的にfishが起動するので、あたかもfishが起動シェルであるかのように使えるというわけです。


.bashrc

# 省略して書いているので、ちゃんとした書き方は下のリンクを参照したり、各自調べてください

source something.bash
exec fish

詳しくはログインシェルは bash のまま fish を利用する等を見ていただければと思います。

確かにこの方法でも良いのですが、個人的には何か敗北した感じがして、あまり好きではありません。

実際の欠点としては、シェル起動時にしか読み込めないというものが一応挙げられるかもしれません。それで困るケースがどれだけあるのかはよくわかりませんが。

追記:最近ROSを触ってみて、起動時にしか読み込めないのは大きな欠点であることがわかりました。(rospack profileしてdevel/setup.bashを再ロードしたくなる等)

ということで、もう一つの(この記事での位置づけとしては本命の)解決手段を紹介します。


2. bassを使う

これはfishでbashコマンドが使えるようになるユーティリティです。

自分はそうですが、fisherを使っている人は、

$ fisher add edc/bass

でインストールできます。また、fundleとomfでもそれぞれ、


config.fish

fundle plugin 'edc/bass'


$ omf install bass

でインストールできるようです(リポジトリのREADMEより)。

bassをインストールさえすれば、あとはconfig.fish等に

bass source something.bash

と書くだけです。簡単ですね。


補足

手元でbass exportもできることは軽く確認しましたが、あらゆることができるかはよくわかっていません。

ちなみに「bass fish」で調べると、ブラックバスが出てきて、googleabilityが大変低い。「bass fish shell」とかで調べましょう。


あとがき

bassを知るのに時間がかかったのは個人的には損失だったので、そういった人が少しでも減ることを願って書いてみました(運が悪かったか、ちゃんと調べていなかっただけかもしれないが)。

fishはいいので、最近勢いのある(?)xonshに負けないで欲しい。


参考