1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

fish SetUp

1
Last updated at Posted at 2024-05-02

fish のインストール

大抵のLinuxにおいてデフォルトのシェルは以下のようにbashである.
しかし,fish (friendly interactive shell) のほうが使いやすいという話を聞いたので,シェルを変えてみることにした.

カーネルとのやり取りをするシェルは毎日つかうものなので,使いやすい方がよいに決まっている.

esho $SHELL
> /bin/bash

shは、UNIX系のOSで使用できるシェルの中で最も古くから存在します。AT&Tベル研究所のスティーブン・ボーン氏によって開発されました。

...

shが開発者の名前にちなんで「Bourneシェル」と呼ばれることに対して、それを生まれ変わらせたシェルという意味の「Bourne Again Shell」の略称で、bashと名付けられています。

「sh」を筆頭に「sh」「bash」「ksh」がsh系派閥です。
「csh」を筆頭に「csh」「tcsh」がcsh系派閥です。
そして、どちらの派閥とも仲良くしたがっている「zsh」があります。

方針

以下の2つの方針を提示する

  1. すべてにおいてfishを使う
  2. 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

  • 特に改造はしていない普通のインストールガイド

  • 結構コレを参考にした

  • oh-my-fish/theme-bobthefish でgitを見やすくするためにfontの話とかが載ってるが,WSLなので参考程度
    • Ubuntu GNOME での実装例

  • aliasとか細かいところもフォローしてる
  • 2015年の情報

  • fisher の plugin なども記載されている
  • HomebrewなのでMacでの実装か

  • M1環境でこだわってるけど参考程度

  • それほどカスタムはしてないけど,.bashrc に書き込むという情報があり

  • 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である.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?