シェルスクリプト1行目 /「/bin/sh」は「bash」のシンボリックリンク /「/bin/sh」と「/bin/bash」の違い

「プログラミング」及び「開発」関連用語集

カテゴリー: Linux  閲覧数:553 配信日:2019-12-02 11:22


シェルスクリプト1行目


「実行時に使用するインタプリタ」を必ず指定する必要がある

shebang
#!で始まる1行目の記述をShebangと呼ぶ
※「"#"を用いた行」はそれ以降コメントアウトとみなされるが、「#!で始まる1行目」はそれとは異なり特別な意味を持つ

一般的には
#!/bin/shと書く
※Unix系の多くの環境で実行可能だから

「/bin/sh」は「bash」のシンボリックリンク


「/bin/sh」を実行する
→「/bin/bash」が実行される
※「/bin/bash」は「bash」シェルの本体ファイル

CentOS7環境で確認してみる
$ ls -l /bin/sh
lrwxrwxrwx. 1 root root 4  9月 14  2016 /bin/sh -> bash


「/bin/sh」と「/bin/bash」の違い


何れを指定しても「bash」シェルとして実行されるが、
同じ「bash」シェルでも、起動経緯により、挙動は微妙に異なる

挙動の違い
エラー発生した時点で処理が止まるか最後まで進むか、など

sh という名前で bash を起動すると 、 sh の起動動作をできるだけ真似しようとする
$ man bash
sh という名前で bash を起動すると、 bash は古くからある sh の起動動作をできるだけ真似しようとします。また POSIX
標準にもできるだけ従おうとします。