通信用語の基礎知識 IPv4
戻る
参加者募集中

shebang

辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:シバン
読み:シェバン
外語:shebang: shell-bang 英語
品詞:名詞
2014/07/23 作成
2014/10/14 更新

UNIXスクリプトの先頭に書かれる、#! から始まる行のこと。

この行で、そのスクリプトを処理するインタープリターフルパスを指定する。

「#!/bin/sh」や「#!/usr/bin/perl」といったものがよく見られる。

#!がないとき

スクリプトファイルは、中にスクリプトを記載したソースファイルではあるが、同時に単なるテクストファイルでもある。

単なるソースファイルに実行権限を付けて実行しても、何もなければ行頭から1行ずつ順番に実行するだけの、ただの「コマンドの羅列」となる。

それで充分なこともあるが、それは単なるバッチファイルとしての動作であり、スクリプトファイルとしては機能していない。

#!の動作

1行目に「#!」を書くと、そのファイル自身を、指定されたインタープリターに与えて実行したことと同じ動作となる。この時のインタープリターの名前はフルパスで書かねばならない。

Linuxで一般的なbashを使ったbashスクリプトの場合は、次のようになる。

#!/bin/bash

フルパスは、whichコマンドなどで出てくる。(例: which bash)

スクリプトファイルをスクリプトファイルとして用いるためには、1行目に「#!」が必須ということになる。

#!の重要性

ファイル内に記述されたコマンドの羅列の実行機能だけであれば、1行目に「#!」がなくても一応は動く。ただしこの場合、ファイル内容であるコマンドの羅列が標準のシェルに送信され順次実行されるのみとなり、psコマンドやtopコマンド等で見ても、表示されるのはそのシェルの名前だけで、実行しているシェルの特定が困難となる。

一方、1行目に「#!」を書くと、1行目で指定されたシェルにファイルが渡されるため、psコマンドやtopコマンド等では、シェルの名前と、シェルスクリプトのファイル名の双方が表示される。実行中のプロセスなどもわかりやすくなる。

  • 指定するインタープリターは、実行ファイルであることが必須である。スクリプトだった場合は動作しない
  • 引数は空白で区切って記述できる
  • shebang行の最大長は実装依存である。あまり長くしないほうがよい
  • UTF-8で記述する場合、ファイル先頭にBOMを付けてはならない。OSは、単純にファイル先頭のバイト列が「#!」かどうかしか見ていない
関連する用語
シェルスクリプト

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club