初心者の自分がザックリ調べたメモ。(間違ってたらご指摘いただけるとうれしいです)
先に結論からいうと
/bin/sh・・・POSIX準拠された動きをするシェル(bashシェルの場合もある)/bin/bash・・・bashシェル
という違いだと思われます。
順番に説明すると
まずLinuxのシェルには
- sh
- bash
- dash
- zsh
というふうにいくつか種類があるわけだけど、シェルによっては「この表記は使えるけどこの表記は使えない」みたいな俺ルールがあるらしい。
なので「bash用のシェルプログラムを他のシェルで動かしてみるとエラーで動かない」みたいなことが起こりえる。
それじゃ困りますよね。
んなわけで「そんな俺ルールだらけだと困るよね。だからある程度規格の統一をしようね」っていう規格がPOSIX。
POSIXに準拠して書いたシェルプログラムは、POSIXに準拠しているシェルだと絶対に動くのだ。
んでどのLinuxディストリビューションも「/bin/shで設定されているシェルはPOSIXに準拠されたものにしようね」ってことになってるらしい。
だからPOSIXに準拠して書いたシェルプログラムは、/bin/shで動かすと絶対に動く。(たぶん・・)
例えば、私が使っているUbuntuだと/bin/shとして指定されているシェルはdashだったので↓、
$ ls /bin/sh -l lrwxrwxrwx 1 root root 4 8月 2 2019 /bin/sh -> dash (/bin/sh -> dashで/bin/shの実体(シンボリックリンク)はdashだぞと書かれている)
このdashがPOSIX準拠モードで動くらしい・・。
たぶんそんな感じ・・。
おわり
参考にしたページ:
コメント