ale*_*han 63
是的,这是允许的。
维基百科关于 shebang 的文章 包括 Dennis Ritchie 在 1980 年的一封电子邮件,当时他将 shebang 的内核支持(作为更广泛的称为解释器指令的包的一部分)引入版本 8 Unix(强调我的):
系统已更改,如果正在执行的文件以魔术字符开头,则
#!
该行的其余部分将被理解为已执行文件的解释器的名称。[…]为了利用这个绝好的机会,把
Run Code Online (Sandbox Code Playgroud)#! /bin/sh
在 shell 脚本第一行的左边距。 后面
!
的空白就OK了。
所以shebang之后的空格已经存在了很长一段时间,事实上,丹尼斯·里奇的例子正在使用它们。
请注意,早期版本的 Unix 在此解释器行中限制为 16 个字符,因此您不能在那里有任意数量的空格。此限制不再适用于现代内核。
仅供参考,某些版本的 systemd 无法解析带有空格的 shebang。使用这样的服务:
[Service]
Type=oneshot
ExecStart=/root/foo.sh
Run Code Online (Sandbox Code Playgroud)
...和这样的shebang:
#! /bin/bash
Run Code Online (Sandbox Code Playgroud)
...你可能会收到这样的错误:
systemd[32834]: foo.service: Failed at step EXEC spawning /root/foo.sh: Exec format error
Run Code Online (Sandbox Code Playgroud)
从 shebang 中删除空间修复了错误。所以要注意那个。
归档时间: |
|
查看次数: |
10125 次 |
最近记录: |