fish

1$ brew install fish

Bash や Zsh のようなシェルの仲間です。 デフォルトでいい感じに表示してくれるので、パソコンを買い替えた場合に便利です。

ログインシェルを fish にしたい

  1. /etc/shellsfishを追記する

  2. chsh -sコマンドでデフォルトシェルを変更する

1$ which fish
2# /usr/local/bin/fish
3# /opt/homebrew/bin/fish
4$ sudo vi /etc/shells
5$ chsh -s /opt/homebrew/bin/fish

fishのパスを/etc/shellsに追記すると chsh -s できるようになります。

fishのパスは OS で異なることがあるので which fish で確認しておきます。 /etc/shellsの編集には管理者権限が必要です。 chsh -sを実行すると変更前に管理者パスワードを確認されます。

fishを設定したい

1$ fish_config

fish_configを実行すると、ブラウザが起動します。 色やプロンプトなど設定できます。

変更点を確認したい

1$ fish_delta

fishのデフォルトから変更を加えた箇所を確認できます。

プロンプトを微修正したい

1$ code ~/.config/fish/functions/fish_prompt.fish

上記のfish_configで選んだプロンプトを少しだけ修正したい場合は、fish_prompt.fishを直接編集してしまいましょう。 僕はAstronautの2段組のプロンプトを選んだのですが、作業中のディレクトリ名は省略形に変更したいです。

パスを設定したい(fish_add_path

# Homebrew
fish_add_path /usr/local/bin

# pipx
fish_add_path $HOME/.local/bin

# Rust
fish_add_path $HOME/.cargo/bin

fish_add_pathを使ってパスを追加できます。

注釈

これまでは以下の方法set -xを使った方法でよかったのですが、v3.2から非推奨になりました。

$ set -x PATH $PATH $HOME/.cargo/bin

パスを確認したい(fish_user_paths

$ echo $fish_user_paths
echo $fish_user_paths
~/.cargo/bin ~/.local/bin /usr/local/bin

$ printf '%s\n' $fish_user_paths
~/.cargo/bin
~/.local/bin
/usr/local/bin

パスはfish_user_pathsで確認できます。

変数を設定したい(set

1set 変数名 2set -l 変数名 値1 値2
3set -gx 変数名     # bash/zshのexportに相当
4set 変数名    # ""に初期化
5set -q 変数名    # 変数名が定義されているかを確認

bash / zshではexportコマンドを使って変数を定義しますが、fishではsetコマンドを使います。

setには変数のスコープを指定できるオプション(-l / --local-g / --global-u / --universal)が3種類あります。 また、変数を外部変数にするかを指定できるオプション(-x / --export-u / --unexport)があります。 外部変数にすると、別のプログラムから変数が参照できるようになります。

set -qで変数が定義されているか確認できます。 if文と組み合わせて条件分岐に使えます。

リダイレクトしたい

$ pbcopy < ~/.gitconfig
$ echo "hello" > stdout.md
$ echo "hello" 2> stderr.md
$ echo "hello" 2>&1 stdout_and_stderr.md