僕のシェル移行記録

目次
BashからZ shell(zsh)に
zshを使って二週間くらい経ったらFish shellに乗り換えた。 理由については後述するけど, zshが素晴らしいシェルで使いにくいなどの理由で乗り換えたわけでもない。
インストール作業
zshをインストールするには,以下のコマンドを使う。
macOS
brew install zsh
UbuntuやLinux Mint
apt install zsh
現在のシステムにインストールされているシェルを確認したい場合は以下のコマンドを使う。
cat /etc/shells
システムのデフォルトシェルをzshに変更するには,以下のコマンドを使う。
chsh -s /usr/local/bin/zsh
注意点
コンフィグレーションの読み込みエラーについて
シェルスクリプトが時々エラーになったときに,
現在の環境の sh
のパスを確認しおいたほうが良いかも。
例えば, sh
が dash
にリンクされている原因でエラーになった可能性がある。
以下のコマンドで確認する。
ls -l `which sh`
スクリプトのコンパイラーにおけるBashの文法との相違点
配列のインデックスにおける文法的なルールについては, Bashの場合は,配列にある最初の要素が0から始まり, zshの場合は,1から始まる。 zshに乗り換えたらなかなか慣れられない場合は, 以下のような内容をコンフィグレーションファイルに設定しておけば, Bashの文法のように,配列が0から始まるようになる。
if [ "$ZSH_NAME" = "zsh" ];then
setopt localoptions ksharrays
fi
zshのコンフィグレーションについて
Bashの .bashrc
と同じ, zshもコンフィグレーションファイルが必要。
デフォルトでは,ホームディレクトリにある .zshrc
のファイルになる。
ここをクリックすることで,僕がGithubにアップロードしたコンフィグレーションファイルを参照する。
zshからFish shell(fish)に
前述のように,zshを使用して二週間の後にfishに乗り換えた。 その理由は,fishに設定とかなにもやらなくてもデフォルトで十分使える。 fishに乗り換えたら,シェルの移行が一段落になり,以下はその記録。
fishのインストール作業
macOS:
brew install fish
UbuntuやLinux Mint:
apt install fish
openSUSE:
sudo zypper install fish
ここで,WindowsのLinuxサブシステムであるopenSUSE環境の場合は,
デフォルトで root
の権限が必要なので,コマンドの最初に sudo
をつけておく。
フォルトシェルの変更
以下のコマンドで行う。パーミッションが足りない場合は sudo
を使う。
chsh -s /usr/bin/fish
これで,デフォルトシェルの切り替えができた。 いったん現在のセッションをログアウトし,再ログインするとfishに入るはず。
ここで,もしfishに入ったら, hostname
などのエラーがたくさん出た場合は,
現在の環境に hostname
というパッケージが足りないということがわかる。
ソースからコンパイルするか,
使われているLinuxディストリビューションのパッケージマネージャを使って hostname
を入れる。
例えば,openSUSEの場合は以下のコマンドを使う。
sudo zypper install hostname
fishのコンフィグレーションファイル
zshと同じ,僕が書いたコンフィグレーションファイルをGithubにアップロードしてあるので, ここをクリックすることで参照しよう。
fishを使うときに出てきたPythonに関する環境変数の関連問題
僕がはまったところが以下二点がある。
tmux
tmuxがバックグラウンドで動いているセッションがある場合は,
PYTHONPATH
の環境変数を変更しても更新されない。
このときに,すべてのtmuxセッションを閉じてから環境変数の変更が有効になる。
fishシェル以外もこの問題に遭遇されると想定できるが,
僕は今回fishにおいて初めてはまったので記録を残す。
PYTHONPATH
について
fishにおいて環境変数を定義する時にやり方は以下に示された。
set <variable_name> <parameter_1> <parameter_2>
このやり方はとても便利で優越性がある。
ただし, PYTHONPATH
を設定する場合は,以下のように行ったほうが良い。
set PYTHONPATH <parameter_1>:<parameter_2>
なぜかというと,簡単にテストした結果, macOSでは,二つの方法がどっちでも目的に達成できる。 Jetson Nanoに動いているUbuntuでは,二番目の方法しか機能しない。 具体的な原因は確認しなかったが, OSが異なって,Pythonのバージョンが同じでも, CPUがx86かarmかによってコンパイル方法が異なったことでエラーになるかと考えている。 いったんここに記録し,引き続き調査。