Knowledge‎ > ‎

Linuxシェルでは先頭行に「#!/bin/bash」と書くべき


Linuxシェルでは先頭行に「#!/bin/bash」と書くべきです。

省略すると「スクリプトファイル」ではなく「ファイル内容のコマンドの羅列」がデフォルトのシェルプログラムに送信されます。そのためpsコマンドやtopコマンドで、シェルを特定することが困難になります。

例えば、test.shというシェルを「./test.sh」と実行したときに、「#!/bin/bash」を書いた場合と書かない場合でpsコマンドとtopマンドで、以下のような違いが現れます。


psコマンドのCOMMAND欄 topマンドのCOMMAND欄
#!/bin/bashを書いている場合 /bin/bash ./test.sh test.sh
書いていない場合 -bash bash

また「#!/bin/sh」と書いているシェルを見かけることがあります。しかし多くのLinuxシステムでは実体として「/bin/sh」を使用しておらず、「/bin/bash」を使用しています。

「#!/bin/sh」と書いておきながら実際には「/bin/bash」を使用した環境で開発しており、気がつかないうちに「/bin/sh」では使えないコマンドを書いているということもあるかも知れません。そしてそのシェルを、別のマシンで動かそうとしたときに動かないという現象が発生しかねません。このようなことを防ぐ為にもLinuxシェルでは「#!/bin/bash」と書くべきです。

もちろんUNIX系もしくは特定のLinux環境で、本当に明示的に「/bin/sh」だけを使いたい場合にはそのように書くべきです。


まとめると以下になります。
  • プロセスの特定が困難になることを避ける
  • 実際に使用する実体を明示し他環境へ持ち込んだ際の混乱を避ける
この理由から、Linuxシェルでは先頭行に「#!/bin/bash」と書くべきです。


2011/09/12