LoginSignup
0
0

fish SetUp

Posted at

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つの方針を提示する

  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

  • WSLにfish shellをいれる

    • 特に改造はしていない普通のインストールガイド
  • WSL2 + Windows Terminal で fish のセットアップ

    • 結構コレを参考にした
  • Fish Shellをかっこよくする方法。bobthefishとCicaできれいなデザイン。

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

    • aliasとか細かいところもフォローしてる
    • 2015年の情報
  • 【完全版】fish shell ~スーパーコマンドライン~

    • 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年
  • Install asdf

    デフォルトのシェルに設定するのですが、本当に起動時からデフォルト設定にしてしまうと、今まで.bashrcなどに様々な設定を書き込んでいた場合は、その依存関係が読み込めなくなってしまいます。

    そこで、bashを残しつつ、あたかもデフォルトで起動するような設定にします。

    .bashrcの最終行に次の一文を追記します。

    exec fish
    

    こうすることでbashを呼び出した後でfishを呼び出すようにします。

  • fish - ArchWiki

    デフォルトのシェルを 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である.

0
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
0
0