#!之间是否允许有空格和 Shebang 中的 /bin/bash ?

#!之间是否允许有空格和 Shebang 中的 /bin/bash ?

在 shebang 中,#!与口译员之间是否允许有空格或更多空间?

例如,#! /bin/bash。这似乎可行,但有人说这是不正确的。

答案1

是的,这是允许的。

维基百科文章关于舍邦 包括一封来自 Dennis Ritchie 的 1980 年电子邮件,当时他正在介绍对 shebang 的内核支持(作为更广泛的软件包的一部分,称为解释器指令)进入版本 8 Unix(强调我的):

系统已更改,因此如果正在执行的文件以魔术字符 开头#!,则该行的其余部分将被理解为所执行文件的解释器的名称。 […]

为了利用这个绝佳的机会,请

#! /bin/sh

位于 shell 脚本第一行的左边距。 后面留空!就OK了。

因此,shebang 后面的空格已经存在很长一段时间了,事实上,丹尼斯·里奇的例子正在使用它们。

请注意,早期版本的 Unix 在此解释器行中限制为 16 个字符,因此不能有任意数量的空格。此限制不再适用于现代内核。

答案2

是的, 后允许有空格#!。甚至有人(错误地)认为某些系统可能需要它,但它始终只是可选的。

如需进一步阅读,请尝试这里

答案3

仅供参考,某些版本的 systemd 无法解析带有空格的 shebang。有了这样的服务:

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

...还有像这样的 shebang:

#! /bin/bash

...你可能会收到这样的错误:

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

删除 shebang 中的空格可以修复该错误。所以要留意那个。

相关内容