シェルの中でもログインシェル及びコマンド、スクリプトとして利用できるように開発されたshellには下記のような種類があります。
shell | 名称 | 互換/参考 | 初期OS系統 |
---|---|---|---|
sh | Bourne shell | sh(b shell) | System V系 |
bash | Bourne-Again Shell | Linux/BSD/UNIX/UNIX風 | |
posh | Policy-compliant Ordinary Shell | - | |
ksh | Korn Shell | sh/ksh | |
pdksh | Public domain Korn Shell | ksh | |
mksh | MirBSD Korn Shell | csh/ksh | MirBSD |
ash | Almquist shell | sh 操作性はkshライク | BSD |
dash | Debian Almquist shell | Debian Linux | |
csh | C Shell | csh | BSD |
tcsh | TC Shell | FreeBSD/Mac OS X | |
zsh | Z Shell | zsh sh/bash/csh/tcsh/ksh | - |
...etc. |
UNIX開発当初からバージョン6まで組み込まれていたシェルをベースにUNIXのバージョン7で新たに開発されたBourne Shellに、ほぼ時を同じくしてUNIXのバージョン6から派生したOSディストリビューションであるBSD上でVersion6のshellをベースに新たに開発されたcshは、間もなくtcshに移行したと云われています。
他方、Bourne Shellをベースにksh、同じくBourne Shellをベースにcsh、kshを参考にしたbash、更に同じくBourne Shellをベースにcsh、ksh、bashを参考にしたzshが誕生という変遷があり、BSD/Berkeley Standard Distribution系でC Shell系が、System V系でBourne Shell系が、各UNIXの標準シェルとして採用され、派生拡張したshellも多くのUNIXで稼働していると言われていますが、そもそもUNIXではshellを複数インストールし、切り替えたり、コマンドライン上からサブシェルとして起動したりできるケースも珍しくありません。
bashはGNUプロジェクトが開発したBourne Shellと互換性を持つシェルでkshはBourne Shellを参考にしているので文法もほぼ同様ですが、csh/tcshは、多くの部分でBourne Shell系とは異なり、zshはcsh系、bsh系も参考にしているので文法的には混在、共存しているようなイメージです。
Linuxでもこれらのシェルはほとんどのディストリビューション(OS機能を盛り込んだ配布パッケージ)に入っていると思います。
但し、UNIXの場合、ハードウェア特有の仕様に依存する部分については同じシェルであってもBSD系とSystemV系などで仕様が異なる場合があり、UNIXとLinuxでも異なる場合があります。
Microsoftも当初オリジナルのUNIX OS(XENIX)を開発していたものの普及せず、その後MS-DOSに移行し、IBM機のプレインストールOSとして急速に普及、更に時を経て現在のWindowsがリリースされましたがWindows環境でもコマンドプロンプトというコマンド入力画面を利用することもでき(ますが、用意されているコマンド類を使ってコマンドプロンプトでできることはUNIX/Linuxに比べ、かなり少なく、コマンドや文法にも違いがあります)、更にscript実行環境WSH/Windows Script Hostを経てWindows PowerShell(Microsoft Shell)をリリースしています。
$ less /etc/shells
システムで利用可能なシェルの種類は、/etc/shellsファイルで確認することができます。
$ echo $SHELL
/bin/bash
$ ps
PID PPID PGID TTY UID STIME COMMAND
1234 5678 2234 1 1000 10:00:00 bash
...
現在利用しているシェルを確認するには、環境変数SHELLに設定された値をechoする方法や現在起動しているプロセスを調べるps(process status)コマンドを確認する方法などがあります。
もし、現在のシェルを切り替えたいなら、[-s]オプション付きで[chsh](chfn)コマンドを使用すると良いでしょう。
一般ユーザーでもこの方法で自身の使用するシェルを変更できますが、その場合もユーザー名は必須です。
chsh後でも環境変数SHELLの値については、再ログインするまでは反映されませんが、[/etc/passwd]には即反映されるので、その変更を確認することもできます。
シェルのバージョンを調べるには該当するシェルにオプションを指定します(尚、shellによって既定のプロンプトも異なります)。
sh/bash/kshの場合
$ sh -version
$ bash --version
$ ksh --version
csh/tcsh/zshの場合
% csh --version
% tcsh --version
% zsh --version
当時、日付を入れる習慣がなかったこともあって、このページの作成日時は忘れましたが、少なくとも数年に渡り、shellバージョンの確認方法において一部、不正確な情報を発信していたことが判明しました。。。訂正させて頂きます。
これまで参考にされた方々がいらっしゃったとしたら、すみませんでした。。。
bash/tcsh/zshは上記の通り、--versionオプションは存在しますが、当時、Cygwinだからできたのか?勘違いだったのか?*BSD/PC-UNIX/Linuxにおけるsh/ksh/cshに関しては、[version]オプションは存在しない模様。。。
尚、少なくともkshに関しては、事前にkshと設定してログインしていれば、後述のechoを使ってecho $KSH_VERSION/${KSH_VERSION}で、bash/tcsh/zshなど追加でパッケージをインストールできるものは、基本的に*BSD/UNIX/Linuxのパッケージ管理システムによるリポジトリ上やインストール済みパッケージの確認方法において、また、tcshはset | grep -i versionでも、zshは、echo $ZSH_VERSION/${ZSH_VERSION}でも確認可能である一方、*BSDなど他で代替されないもの含め、組み込みの/bin/sh、/bin/cshに関しては、その有無含め、バージョン確認方法はわかりませんでした。
また、標準出力(既定では画面)に表示指示を出す[ echo ]というコマンドを利用し、環境変数を参照し、環境変数BASHやSHELLを[ $BASH ]、[ $SHELL ]として、bashのバージョンを[ $BASH_VERSION ]、kshのバージョンを[ $KSH_VERSION ]として参照することもできます。
$ echo $SHELL
$ echo $BASH
$ echo $BASH_VERSION
また、type/which/whereisコマンドなどを利用してパスを確認することもできます。
command shell | 名称 | 用途 |
---|---|---|
scsh | Scheme Shell | UNIX スキーマ用プログラミング言語・シェルスクリプト UNIX Shellのスキーマに組み込まれているオープンソース Shellスクリプト及びスキーマの大半を占めるレイヤ |
slsh | Interpreter for S-Lang scripts | S-Lang用シェルスクリプト(対話式インタフェース含む) |
wish | Windowing Shell | X Window System/Mac OS XなどにおけるGUI用Shell |
command shell | 名称 | 用途 |
---|---|---|
rsh | Remote SHell | ネットワークを介した遠隔(リモート)操作 |
ssh | Secure SHell | ネットワークを介したセキュリティ保護された遠隔操作 |
名称 | 用途 |
---|---|
tclsh | 標準入力やファイルなどからTclコマンドを読み込むTclインタプリタを組み込んだshell風のアプリケーション |