13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#!/bin/bash とは?

Last updated at Posted at 2026-01-23

追記(2026-01-24)

コメントでいただいたご指摘を参考に記事の追記修正を行いました。

貴重なご意見をありがとうございました。

はじめに

シェルスクリプトを書くとき、冒頭に以下の行を付けます。

#!/bin/bash

筆者がシェルスクリプトを習ったのは大学一年生のプログラミングの授業でした。複数のコマンドをまとめたような新しいコマンドを作ることができるということにワクワクした思い出があります。

その時、上記の様にシェルスクリプトのファイル冒頭に書く行を教わりました。これを書いておくと動くという言わば「おまじない」として教わったので、本質的な意味は知らされませんでした。

冒頭に#があるのでコメント部分になっているようですが、そのあとパスのようなものが入っているので何かしら意味があるのかな、と思っていましたが深くは調べず、なんとなく今まで使っていました。

今回はこれを「おまじない」で終わらせないために、自分なりにまとめてみました。

そもそも/bin/bashとは

このパスにcdしてみると以下のようになります。

$ cd /bin
$ ls | grep sh
bash
(中略)
sh
(後略)
xrefresh

このように、bashとかshのようなものがありました。何かしらの実行可能ファイルのようです。

また、以下のコマンドを実行するとこうなりました。

$ ls -l /bin
lrwxrwxrwx 1 root root 7 Apr 22  2024 /bin -> usr/bin

どうやら、/bin/usr/binへのシンボリックリンクのようです。

調べてみた結果、これらは簡単に言えばシェルの本体に相当するものらしいです。我々が普段使っているコマンドはこれらの/bin/bashなどに渡され、実行されるようです。

#!/bin/bashとは

※2026-01-24 コメントでいただいた指摘より追記修正しました

この行は俗に「シバン」「シェバン」と呼ばれるものです。

シェルスクリプトの冒頭に書くこの記述はコメントではなく、「インタプリタの選択」をしています。つまり、スクリプトを何に実行してもらうのかを指定しているというわけです。'!'を消すとコメント扱いになってしまうので注意が必要です。

この行の働きを見てみます。以下のようなファイルtestがあるとしましょう。

#!/bin/bash
echo 'test'

これを実行するときは以下のように記述するわけですが、

$ ./test

シバンの記述がファイルの冒頭にあると、「シェルはシバンで指定したインタプリタを呼び出し、ファイルの内容を引数として渡す」ことになります。つまり、上記の記述は以下と同義になります。

$ /bin/bash ./test

こんなこともできる

PythonやRubyなどのインタプリタ言語もこのような方法で実行させることができます。以下のファイルをscriptとして作成して保存します。

#!/usr/bin/python3

print("aaaaa")

/usr/bin/python3のところはwhich python3を実行すると得られます。

実行権限を付与した後、以下を叩くとaaaaaprintされます。

$ ./script

上述の通り、/usr/bin/python3 ./scriptがシェルに渡されたので、Pythonが呼び出され、./scriptがPythonにより解釈・実行されたことになります。

この方法を用いると、python3 ./scriptのような書き方をしなくても、scriptというファイルを実行してやるだけでPythonプログラムが実行できるわけです。使う側から見るとファイルの記述に用いられている言語を気にせずスクリプトを実行できるほか、実行方法を書いている側が指定できるので、想定外の動作をするリスクを軽減できそうですね。

おわりに

スクリプトの作成時に実行のために用いるインタプリタを指定しているんだ、ということを初めて知ったので非常に興味深かったです。シェルスクリプト以外のインタプリタ言語を実行させることもできるようなので、応用の幅が広そうだなと感じました。

それではまた。

参考文献

/usr/bin/bash/bin/bash の違い

/bin/sh と /bin/bash の違い - 双六工場日誌

個人的な備忘録:シェルスクリプト実行時に記述する『#!/bin/bash』について自分なりに深掘りしてみた #Linux - Qiita

#!/bin/sh は ただのコメントじゃないよ! Shebangだよ! #UNIX - Qiita

13
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?