僕のシェル移行記録

ソース: Fish shell logo

目次

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 のパスを確認しおいたほうが良いかも。 例えば, shdash にリンクされている原因でエラーになった可能性がある。 以下のコマンドで確認する。

  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かによってコンパイル方法が異なったことでエラーになるかと考えている。 いったんここに記録し,引き続き調査。

このページを編集

Xin Li
Xin Li
講師

機械学習及び深層学習の応用に関する研究に従事し,不均一・偏りのあるデータに対するサンプリング手法および学習アルゴリズムに注目している。詳細はこちら

comments powered by Disqus
次へ
前へ

関連項目