/bin/shと/bin/bashの違い【POSIX】

初心者の自分がザックリ調べたメモ。(間違ってたらご指摘いただけるとうれしいです)

 

先に結論からいうと

  • /bin/sh・・・POSIX準拠された動きをするシェル(bashシェルの場合もある)
  • /bin/bash・・・bashシェル

という違いだと思われます。

 

順番に説明すると

まずLinuxのシェルには

  • sh
  • bash
  • dash
  • zsh

というふうにいくつか種類があるわけだけど、シェルによっては「この表記は使えるけどこの表記は使えない」みたいな俺ルールがあるらしい。

なので「bash用のシェルプログラムを他のシェルで動かしてみるとエラーで動かない」みたいなことが起こりえる。

それじゃ困りますよね。

 

んなわけで「そんな俺ルールだらけだと困るよね。だからある程度規格の統一をしようね」っていう規格がPOSIX。

POSIXに準拠して書いたシェルプログラムは、POSIXに準拠しているシェルだと絶対に動くのだ。

 

んでどのLinuxディストリビューションも「/bin/shで設定されているシェルはPOSIXに準拠されたものにしようね」ってことになってるらしい。

というか厳密にいうと、以下の表現のほうが正しいっぽい。

  • ❌:/bin/shに指定されているシェルはPOSIXに準拠されたシェル
  • ⭕:/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準拠モードで動くらしい・・。

 

たぶんそんな感じ・・。

 

おわり

 

参考にしたページ:

https://sechiro.hatenablog.com/entry/20120806/1344267619

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました