【问题标题】:POSIX-compatible shell script: Start with a shebang?与 POSIX 兼容的 shell 脚本:从 shebang 开始?
【发布时间】:2016-04-13 14:48:29
【问题描述】:

我正在编写一个 shell 脚本,并希望它与 POSIX 兼容。我一直认为 shell 脚本应该以 shebang (#!) 开头,但我在网上找到了this

如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。

如果我希望脚本符合 POSIX 标准,是否应该以 #! 行开头?

【问题讨论】:

标签: shell posix sh


【解决方案1】:

情况发生了变化。 过去是一个未标记(没有#!)的脚本会运行 Bourne shell,但现在它是未指定的,正如你所说的。

如果不存在 #!,则 Korn shell 和 Bash 的“最新”版本会自行运行(即 bashksh)。但是 zsh 运行 sh (POSIX shell)。所以这取决于运行脚本的shell。

如果不是外壳,那么 C 层将调用execve(或它的变体)。 POSIX 标准对使用哪个 shell 含糊不清,但execve 的 GNU 版本说:

"execve() 执行 filename 所指向的程序。filename 必须是二进制可执行文件,或者是以如下形式的行开头的脚本:"

#! interpreter [optional-arg]

我的建议是始终提供#! 线路 - 为确定性付出的代价很小。如果由于某种原因不需要该行,那么它只是一个注释,因为它以 # 开头。

【讨论】:

  • POSIX 可能已决定澄清行为之间的历史冲突(如您在第 1 段和第 2 段中所述)并声明它“未指定”,以便用户不要期望系统和 shell 之间的行为一致。 POSIX 倾向于专注于共性,并且经常忽略操作系统之间没有达成共识的领域。
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多