/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生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

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