【FreeBSD】どのシェルを使うべき?

今回は、OSとユーザの仲介役であるコマンドラインシェルについてのお話。

シェルの種類

現在、主に使われていそうなシェルを下表にまとめた。

シェル 系列 初版 特徴
sh B系 1977 UNIX系OSには標準で入っている。対話シェルとしては機能不足
ash B系 1991 shBSDラインセンス版。FreeBSDshashの改良版らしい
bash B系 1989 Linux, MacOSの標準シェル。shの機能拡張版
zsh B系 1990 shの超絶機能拡張版。カスタマイズ性が非常に高い
csh C系 1978 FreeBSDには標準で入っている。対話シェルとしては多少機能不足
tcsh C系 1980? FreeBSDには標準で入っている。cshの機能拡張版
fish 独自 2006? 簡単に使える高機能対話シェルらしい

どのシェルを使うか

シェルの使い方には、大きく分けて「シェルスクリプト」と「対話シェル」の2つある。
それぞれでどのシェルを使うべきかについての僕の結論は下記。

  1. シェルスクリプト
    • sh一択
  2. 「対話シェル」
    • 好きなシェルを使おう
    • こだわりがないならbashが無難

まずは「シェルスクリプト」について。
ネットにはbashzshスクリプトが溢れているけれども、このサイトで紹介する自作のシェルスクリプトsh一択。
POSIX準拠による移植性が主な理由。
(詳細はこちらを見てね)

一方「対話シェル」については、『好きなの使えばいいじゃない』というスタンス。
『移植性重視ならsh一択じゃないの?』と思うかもだけど、実用的に結構辛いと思う。
止めはしないけどね!

現在、対話シェルとしてよく使われていそうなものについての、僕の雑感は下記。

シェル 雑感
bash Linux/MacOS標準なので、今後、Linuxなども使うつもりなら有力候補
zsh 膨大な機能と超絶的にカスタマイズ性が高いけど、動作が若干モッサリ
tcsh FreeBSD標準だけど、B系シェルとの記述の違いでハマるかも
fish デフォルトでも使い勝手が良さげで、動作も重くない。B系/C系シェルとの記述の違いでハマるかも

機能性重視ならzsh or fish
標準である安心感を好むならbash or tcsh

というのが、メジャーどころではないだろうか。

FreeBSDの用途が個人利用であれば、好きなシェルを自分でインストールすればいい話なので、標準であることのメリットは小さいかもだけれども。。

もし、個人利用で特にこだわりがないなら、ひとまずbashを使ってみるのがいいかも。
なぜなら、シェルスクリプト(sh)で覚えた構文が、そのまま使える。
また、ネットに溢れている「コマンドラインで何かする系」の情報は、LinuxMacOSユーザが多いこともあり、bash前提の記載が結構多い。
tcshを使っている場合、それらの情報を参考にしようとすると、B系とC系シェルの構文の違いでハマることがある。
それなら最初からbashを使っておけば無難ではあると思う。

とはいえ、結局、道具というのは多少不便でも、愛着があれば工夫して使っていけるものだと感じている。
色々試しながら、好きになれるシェルを探してみよう。

さて、僕はB系でもC系でもない第3勢力fishを使ってみますかね。
BTF(bash/tcsh/fish)カオスがはじまりそうな予感。。。

参考

以上。