環境構築:ユーザフレンドリーで補完機能の強力なfishへ移行(Login shellをbashからfishへ移行)
前書き
本記事では、CLI(Terminal)で用いるinteractive shellをfish(friendly interactive shell)に移行する方法を記載します。fishは、Debian環境のdefault shellであるdash(POSIX互換のash拡張)やlogin shellであるbashよりも優れた点が多いです。
- 強力なサジェスト(予測変換)・補完機能
- Tabキーを押すと、入力中コマンドの機能説明を表示(下画像)
- Terminalのカラースキーム設定が容易
- Webインターフェースでも設定変更が可能
- パッケージマネージャ(fisher)で機能拡張が可能
- デフォルト設定で使いやすい
上表で示した内容以外にも、他の高機能shell(zshなど)よりも学習コストが低い、Vimのkey bindingが使用可能など、細かい点で利点があります。ただし、唯一のデメリットとして、「fishはPOSIX互換でない事(Default shellに向かない事)」が挙げられます。
本記事では、POSIX非互換というデメリットに配慮しつつ、Login shellをbashからfishへ移行する手順を示します。
検証環境
Debian9(stretch)環境を使用します。Default shellはdash、Login shellはbashという環境です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
_,met$$$$$gg. nao@debian ,g$$$$$$$$$$$$$$$P. ---------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 9.9 (stretch) x86_64 ,$$P' `$$$. Kernel: 4.9.0-9-amd64 ',$$P ,ggs. `$$b: Uptime: 1 day, 5 hours, 31 minutes `d$$' ,$P"' . $$$ Packages: 2284 $$P d$' , $$P Shell: bash 4.4.12 $$: $$. - ,d$$' Resolution: 2560x1080 $$; Y$b._ _,d$P' DE: Cinnamon 3.2.7 Y$$. `.`"Y$$$$P"' WM: Mutter (Muffin) `$$b "-.__ WM Theme: Cinnamon (Albatross) `Y$$ Theme: BlackMATE [GTK2/3] `Y$$. Icons: Gnome [GTK2/3] `$$b. Terminal: gnome-terminal `Y$$b. CPU: Intel i3-6100U (4) @ 2.3GHz `"Y$b._ GPU: Intel Integrated Graphics `""" Memory: 5106MB / 32069MB |
1 2 3 4 5 6 7 |
(注釈):Default shellの確認。dashへのシンボリックリンク。 $ ls -al /bin/sh lrwxrwxrwx 1 root root 4 1月 24 2017 /bin/sh -> dash (注釈):Login shellの確認。一番右側にLogin shellであるbashが記載されています。 $ grep $USER /etc/passwd nao:x:1000:1000:CHIKAMATSU Naohiro,,,:/home/nao:/bin/bash |
fishとfisherのインストール
まずは、fish(shell)とfisher(fishプラグインマネージャ)をインストールします。Debian9(stretch)以降であれば、aptでfishを取得可能です。fisherは、公式サイトのインストール手順で取得します。
1 2 |
$ sudo apt install fish $ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish |
Login shellのみをfishに変更
「前書き」で記載したとおり、fishはPOSIX互換性がありません。そのため、Default shell をfishに変更した場合(/bin/shのシンボリックリンクが/usr/bin/fishの状態)、POSIX互換を前提としたshell scriptを読み込めず、何らかの動作異常を起こす可能性があります。
以上を踏まえると、「Default shellはdashのまま」とし、「Login shellのみをfish」に変更します。なお、.bashrcに”exec fish”を記載し、Login shellはbashのままfishを起動する方法があります。しかし、この方法ではexportした環境変数設定が弾き継がれません。そのため、Login shell自体をfishに変更する方法を採用しました。
fishは、.bashrc(bash用の設定ファイル)に記載された設定を読み込みません。そのため、.bashrcに記載されている設定を”~/.config/fish/config.fish”に移行します。この際、.bashrcとconfig.fishで環境変数設定(export)の書式が異なるため、注意が必要です。
まずは、Login Shellをbashからfishに変更します。
1 2 3 4 5 6 7 8 9 10 11 |
(注釈):Login shellとして使用できるshell一覧にfishがある事を確認 $ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/fish # ★ (注釈):Login shellをfishに変更。 $ chsh --shell /usr/bin/fish |
次に、.bashrcに記載したexportやalias設定を”~/.config/fish/config.fish”に移行します。特に、自分で設定していない場合は、以下の手順は不要です。
1 2 3 4 5 6 |
(注釈):私の環境で、.bashrcに記載した設定は、以下の4行 $ cat ~/.bashrc | tail -n 4 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/bin/javac export PATH=~/bin:$PATH alias vi="/usr/local/bin/nvim" source $HOME/.cargo/env |
1 2 3 4 |
$ touch ~/.config/fish/config.fish $ vi ~/.config/fish/config.fish (注釈):好きなエディタを使用して良い (注釈):設定内容は以下の通り。 |
1 2 3 4 5 6 7 8 9 |
# 環境変数(書式:set -x PATH hoge. リスト形式 not コロン区切り) set -x JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/bin/javac set -x PATH ~/bin $PATH # エイリアス alias vi='/usr/local/bin/nvim' # 別ファイル設定読み込み source $HOME/.cargo/env |
お前を消す方法:Welcome to fish, the friendly interactive shell
上記の手順の後にTerminalを再起動すると分かりますが、fish起動後に
1 2 |
Welcome to fish, the friendly interactive shell nao@debian ~> |
と、毎回Welcomeメッセージが出ます。そのため、”~/.config/fish/config.fish”に”set fish_greeting”を追記し、メッセージの出力を抑制します。
1 2 |
# fish起動時のWelcome~メッセージを表示しない set fish_greeting |
Terminalのカラースキームを変更
FishはTerminalのカラースキームが複数用意されています。最も簡単にカラースキームを設定する方法は、後述するWebブラウザを用いる方法です。
この節では、oh-my-fish(GitHub、サンプル画像つき)とfisherを用いて、自分好みのカラースキームを設定する方法を示します。
1 2 3 4 5 6 7 |
(注釈):引数を"oh-my-fish/theme-(好きなカラーテーマ名)"に置換する事 $ fisher add oh-my-fish/theme-bobthefish (注釈):bobthefishは依存しているfontがあるため、別途インストール $ sudo apt install python3-pip $ sudo pip3 install powerline-status $ sudo apt install fonts-powerline |
今回の例で使用したbobthefishは、別途カラースキーム一覧があります。好きなカラースキームを探して、”~/.config/fish/config.fish”に”set theme_color_scheme (カラースキーム名)”を追記すれば、反映されます。カラースキームの色合いをテストする場合は、”__bobthefish_display_colors”で確認できます(下画像)。
便利pluginのインストール
「最近使用したディレクトリにジャンプできるz plugin」および「あいまい検索ができるfzf plugin」のみをインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 |
(注釈):"z (ディレクトリ名)"で、最近使用したディレクトリにジャンプ可能 $ fisher add jethrokuan/z (注釈):曖昧検索のfzfラッパー Ctrl+f:ファイル曖昧検索、Ctrl+r:コマンド履歴の曖昧検索、Alt+o:ディレクトリ検索 $ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf $ ~/.fzf/install $ fisher add jethrokuan/fzf $ echo "" >> ~/.config/fish/config.fish $ echo "# FZFの古いキーバインドを使わない" >> ~/.config/fish/config.fish $ echo "# (昔、fishのキーバインドとコンフリクトしたため)" >> ~/.config/fish/config.fish $ echo "set -U FZF_LEGACY_KEYBINDINGS 0" >> ~/.config/fish/config.fish |
他に設定を変更する場合:Webブラウザで設定
fishは、設定をWebブラウザ経由で変更することが出来ます。Terminalで”fish_config”と入力し、実行すれば以下の画面が開かれます。後は、ユーザの好みで設定を適宜変更して下さい。
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] […]