fish
のインストール
大抵のLinuxにおいてデフォルトのシェルは以下のようにbashである.
しかし,fish (friendly interactive shell) のほうが使いやすいという話を聞いたので,シェルを変えてみることにした.
カーネルとのやり取りをするシェルは毎日つかうものなので,使いやすい方がよいに決まっている.
esho $SHELL
> /bin/bash
シェル(Shell)とは?仕組みや種類・シェルスクリプトの実行方法まで解説!
shは、UNIX系のOSで使用できるシェルの中で最も古くから存在します。AT&Tベル研究所のスティーブン・ボーン氏によって開発されました。
...
shが開発者の名前にちなんで「Bourneシェル」と呼ばれることに対して、それを生まれ変わらせたシェルという意味の「Bourne Again Shell」の略称で、bashと名付けられています。
シェルとは | 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
「sh」を筆頭に「sh」「bash」「ksh」がsh系派閥です。
「csh」を筆頭に「csh」「tcsh」がcsh系派閥です。
そして、どちらの派閥とも仲良くしたがっている「zsh」があります。
方針
以下の2つの方針を提示する
- すべてにおいてfishを使う
- bashの環境にfishをかぶせる
1. すべてにおいてfishを使う
新規環境構築ではこちらでもいいかもしれない.
ただ,bashの方がマジョリティであるため,Ubuntu関連の多くのWeb記事がbashの表記であるため,不具合の場合にSHELL由来か否かを判断する能力が必要と思われる.
特にfishはfishrcなどのファイルが存在せず,読み替えに若干の手間が必要でありPATHを通すのが面倒であるのも事実.
2. bashの環境にfishをかぶせる
PATH読み込みなどの実態はbashだが,表示はfishにする手法.
上述の問題が解決するが,見かけはfishなのに,実態はbashになるので,常に注意が必要であるという問題点がある.
HowTo
今回は2のbashを基本としつつ,fishの起動コマンドを.bashrcに書き込むことで,できるだけ既存の環境を変えず,飽きたらすぐ辞められる形式でbashの環境にfishをかぶせる.
fish Install
sudo apt-add-repository ppa:fish-shell/release-3;\
sudo apt update;\
sudo apt install fish -y;\
which fish;\
chsh -s /usr/bin/fish
-
sudo apt-add-repository ppa:fish-shell/release-3;\
- fishのレポジトリを追加
-
sudo apt update;\
- 念のためアプデ
-
sudo apt install fish -y;\
- fishのインストール
-
which fish;\
- PATHの確認
-
chsh -s /usr/bin/fish
-
chsh
(ChangeShell)コマンド: ログインシェルを変更する -> 参考
-
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt update
$ sudo apt install fish
$ which fish
/usr/bin/fish
$ /usr/bin/fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
~> which bash
/usr/bin/bash
~> /usr/bin/bash
$
Update .bashrc
上記のコードでfishのインストールと動作確認が行えたら,.bashrcに以下を追記する.
exec fish
URLs
-
- 特に改造はしていない普通のインストールガイド
-
WSL2 + Windows Terminal で fish のセットアップ
- 結構コレを参考にした
-
Fish Shellをかっこよくする方法。bobthefishとCicaできれいなデザイン。
-
oh-my-fish/theme-bobthefish
でgitを見やすくするためにfontの話とかが載ってるが,WSLなので参考程度 - Ubuntu GNOME での実装例
-
-
- aliasとか細かいところもフォローしてる
- 2015年の情報
-
- fisher の plugin なども記載されている
- HomebrewなのでMacでの実装か
-
M1 MacにiTerm2+fish shell+Iceberg+bobthefishを導入する
- M1環境でこだわってるけど参考程度
-
Ubuntu20.04のデフォルトshellをfishにする
- それほどカスタムはしてないけど,
.bashrc
に書き込むという情報があり
- それほどカスタムはしてないけど,
-
【Ubuntu】 shellをfish + fisherman に変えた話
- Ubuntuでの実装
- FishとFishermanについてなので詳しく載っているしフォントも変えてるが2018年
-
デフォルトのシェルに設定するのですが、本当に起動時からデフォルト設定にしてしまうと、今まで.bashrcなどに様々な設定を書き込んでいた場合は、その依存関係が読み込めなくなってしまいます。
そこで、bashを残しつつ、あたかもデフォルトで起動するような設定にします。
.bashrcの最終行に次の一文を追記します。
exec fish
こうすることでbashを呼び出した後でfishを呼び出すようにします。
-
デフォルトのシェルを Bash にして、
exec fish
という行を.bashrc
などの適切な Bash#設定ファイル に追加するだけでよいのです。これにより、Bash は/etc/profile
と/etc/profile.d
にあるすべてのファイルを適切にソースするようになります。fish は Bash のプロセスを置き換えるので、fish を終了すると端末も終了します。以下のオプションと比較すると、これはローカルマシンでも SSH サーバでも動作するため、最も普遍的な解決策と言えます。ヒント:
- このセットアップでは、
bash --norc
を使用して、~/.bashrc
からコマンドを実行せずに手動で Bash に入り、exec fish を実行して fish に戻ります。 -
bash -c 'echo test'
のようなコマンドを fish の起動ではなくBashで実行させるには、代わりにif [ -z "$BASH_EXECUTION_STRING" ]; then exec fish; fi
と記述します。 - 親プロセスが fish でない場合のみ、fish にドロップインします。これにより、bash の設定を失うことなく、
~/.bashrc
コマンドを実行することで bash に素早く入ることができます。
if [[ $(ps --no-header --pid=$PPID --format=comm) != "fish" && -z ${BASH_EXECUTION_STRING} ]] then exec fish fi
- このセットアップでは、
(余談)
なお,筆者の現環境はfishではなくzshである.