Shebangで#!と/bin/bashの間にスペースを入れることはできますか?

Shebangで#!と/bin/bashの間にスペースを入れることはできますか?

シャーバンと通訳者#!の間に空白以上が許可されていますか?

たとえば、#! /bin/bash。これは効果があるようですが、一部の人々はそれが間違っていると言います。

答え1

はい、許可されています。

ウィキペディア記事シェボンについて Dennis Ritchieがshebangのカーネルサポートを紹介したときに送信された1980年の電子メールが含まれています。通訳者指令)をバージョン8 Unixに(強調表示):

#!実行中のファイルが魔法の文字で始まる場合、残りの行は実行中のファイルのインタプリタ名として認識されるようにシステムが変更されました。 [… ]

この良い機会を活用するには、

#! /bin/sh

シェルスクリプト 最初の行の左マージンに位置します。 空にしても!大丈夫です。

したがって、shebang以降のスペースは長く存在しており、実際にDennis Ritchieのケースではこれを使用しています。

以前のバージョンのUnixでは、このインタプリタ行は16文字に制限されていたため、スペースを含めることはできません。この制限は、もはや最新のカーネルには適用されません。

答え2

はい、後ろにスペースを入れることができます#!。一部のシステムではこれを要求するかもしれないと(間違って)信じていましたが、常にオプションです。

もっと読むここ

答え3

参考までに、systemdの一部のバージョンでは、空白のあるshebangを解析できません。次のサービスを使用すると:

[Service]
Type=oneshot
ExecStart=/root/foo.sh

...そして次のシェバンもあります:

#! /bin/bash

...次のようなエラーが発生する可能性があります。

systemd[32834]: foo.service: Failed at step EXEC spawning /root/foo.sh: Exec format error

shebangからスペースを削除するとエラーが解決します。だから注意深く見てください。

関連情報