初心者の自分がザックリ調べたメモ。(間違ってたらご指摘いただけるとうれしいです)
先に結論からいうと
/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準拠モードで動くらしい・・。
たぶんそんな感じ・・。
おわり
参考にしたページ:
コメント