POSIX兼容的shell脚本:从一个shebang开始?

时间:2016-04-13 14:48:30

标签: shell posix sh

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

  

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

我是否应该使用#!行启动脚本,如果我希望它符合POSIX标准?

1 个答案:

答案 0 :(得分:1)

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

如果没有bash,Korn shell和Bash的“最近”版本会自行运行(即ksh#!)。但是zsh运行sh(POSIX shell)。所以这取决于运行脚本的shell。

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

execve()执行filename指向的程序.filename必须是二进制可执行文件,或者以表格行开头的脚本:

#! interpreter [optional-arg]

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