<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
ファイルの先頭に <code>#!</code> と書き、
その直後に実行するべき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">命令</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>を書き、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">改行</anchor>を書きます。
その続きがファイルの本体となります。</p><section><h1><code>#! perl</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> の世界では、環境によって <code>perl</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor>が違うため、
配布用のスクリプトでとりあえず 
<dfn><code>#!perl</code></dfn>
や
<dfn><code>#! perl</code></dfn>
のように書いておく慣習がありました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
その後
<code>#!<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/usr/bin/env</anchor> perl</code>
のように書かれるようになりました。
この書き方は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> 以外でも行われます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 
気にせずに <code>#!/usr/bin/perl</code> や <code>#!/usr/local/bin/perl</code>
のように決め打ちで書いておくこともよくありました。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> 
<code>perl</code> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor> を書く<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">場所を示しておく<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">placeholder</title></anchor>
ことに加えて、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">エディター</anchor>類が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> として認識して
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> モードに切り替えてくれることも期待できます。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor> 指定だけで実行する場合や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>として実行させる場合には、
入手したらまず適切な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor> に書き換えて使います。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 
常に <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">perl</anchor> script.pl</code> のように実行するのであれば、気にせずそのままで使います。</p></section><section><h1><code>#!ruby</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> の <code>#!perl</code> と同様に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> の世界でも
<dfn><code>#!ruby</code></dfn>
のように書いておく慣習があります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> また、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> では</p><blockquote><pre>#!/bin/sh
exec ruby19 -x &quot;$0&quot; &quot;$@&quot;
#!ruby
# coding: utf-8</pre></blockquote><p>のような場合、 <code>#!ruby</code> が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> の扱いになります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor># coding:</anchor> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 
つまり <code>-x</code> が指定されたとき、 <code>#!</code> で始まり
<code>ruby</code> を含まれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行</anchor>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor> になります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
<cite xml:lang="ja-JP">多言語化 (Ruby 1.9.3)</cite>, <time>2016-08-28T13:48:39.000Z</time>, <time>2025-11-06T13:57:59.066Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html#encoding">https://docs.ruby-lang.org/ja/1.9.3/doc/spec=2fm17n.html#encoding</anchor-external></li></ul></refs></section><section><h1>環境変数 <code>ALTERNATE_SHEBANG</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>
は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境変数</anchor>
<dfn><code>ALTERNATE_SHEBANG</code></dfn>
によって <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shebang</anchor>
を <code>#!</code>
以外に変更できます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal></src></p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <cite xml:lang="en">perl5/dosish.h at blead · Perl/perl5 · GitHub</cite>, <time>2025-11-03T14:19:12.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/Perl/perl5/blob/blead/dosish.h#L74">https://github.com/Perl/perl5/blob/blead/dosish.h#L74</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">perlfaq3 and perlrun have &quot;ALTERNATIVE_SHEBANG&quot;, everywhere else it's ALTERNATE_SHEBANG · Issue #6617 · Perl/perl5</cite>, <time>2025-11-03T14:19:26.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/Perl/perl5/issues/6617">https://github.com/Perl/perl5/issues/6617</anchor-external></li></ul></refs></section></section><section><h1>処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プラットフォーム</anchor>が実行時に読んで、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実行</anchor>するべき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">命令</anchor>を決定します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unix</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">カーネル</anchor> (<code>execve</code>) が読んで解釈します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cygwin</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSYS</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSYS2</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Git Bash</anchor> でも <code>execve</code> / <code>exec</code>
が読んで解釈します。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ruby</anchor> は起動時に読んで、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オプション</anchor>を認識します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">awk</anchor> も実装によっては読んで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オプション</anchor>を認識するとされます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <code>tcksh</code> や <code>sh</code> も読んで認識することがあるとされます。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bash</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">sh</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ksh</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Python</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コメント</anchor> (<code>#</code>) として認識し無視します。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">エディター</anchor>類 (<cite>Emacs</cite>, <cite>Vim</cite>, その他各種)、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文ハイライト</anchor>ツール (専用のもの、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ページャー</anchor>に組み込まれたもの、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">差分</anchor>表示ツールに組み込まれたものなど各種)、
その他<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プログラム</anchor>開発支援ツール (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lint</anchor> など)、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル形式</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">sniffer</anchor>
などが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル形式</anchor>の判定の材料として使うことがあります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 
この用途の場合、厳密な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor> の指定を認識する意味はないので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規表現</anchor>などによって <code>perl</code> が含まれているか、
<code>ruby</code> が含まれているか、のような大雑把な検査で決定する場合が多いようです。</p></section><section><h1>JavaScript の前に書く shebang</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <cite xml:lang="en">Executable scripts</cite>, <time>2025-11-06T18:43:56.000Z</time>, <time>2025-11-07T14:48:39.172Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.deno.com/examples/hashbang_tutorial/#creating-an-example-script">https://docs.deno.com/examples/hashbang_tutorial/#creating-an-example-script</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <cite xml:lang="en-GB">Node.js — Run Node.js scripts from the command line</cite>, <time>2025-11-07T14:50:35.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://nodejs.org/en/learn/command-line/run-nodejs-scripts-from-the-command-line">https://nodejs.org/en/learn/command-line/run-nodejs-scripts-from-the-command-line</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> 
<cite xml:lang="en-US">Getting Started | google/zx</cite>, <time>2025-10-19T13:48:24.000Z</time>, <time>2025-11-07T14:51:57.288Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://google.github.io/zx/getting-started">https://google.github.io/zx/getting-started</anchor-external></p></section><section><h1>関連</h1><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>コメントの中身が意味を持ってしまう</anchor> </sw-see></p><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>ファイル形式の識別</anchor>, <anchor>拡張子</anchor>, <anchor>creator code</anchor> </sw-see></p><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>permission</anchor> </sw-see></p><p><sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>資源ヘッダー</anchor>, <anchor>sniffing</anchor> </sw-see></p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="ja">本の虫: Shebangという謎な事実上業界標準について</cite>, <time>2023-07-04T21:38:48.000Z</time>, <time>2023-07-05T07:32:22.170Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://cpplover.blogspot.com/2013/08/shebang.html">https://cpplover.blogspot.com/2013/08/shebang.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">Shebang (Unix) - Wikipedia, the free encyclopedia</cite>
(<time>2009-10-09 02:48:32 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://en.wikipedia.org/wiki/Shebang_(Unix)">http://en.wikipedia.org/wiki/Shebang_(Unix)</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite>shell - How to use multiple arguments with a shebang (i.e. #!)? - Stack Overflow</cite>
( (<time>2014-10-03 00:30:31 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-i-e">http://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-i-e</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> の <code>#!</code> とは無関係です。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <code xmlns="http://www.w3.org/1999/xhtml">#!</code> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <cite xml:lang="ja">Shebang集 #UNIX - Qiita</cite>, <time>2025-11-07T14:43:48.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://qiita.com/cielavenir/items/6063c117f25f9188b84c">https://qiita.com/cielavenir/items/6063c117f25f9188b84c</anchor-external></p></section></body></html>