我正在编写一个shell脚本,并希望它与POSIX兼容。我一直认为shell脚本应该以shebang(#!
)开头,但我在网上发现了this:
如果shell命令文件的第一行以字符"#!"开头,则结果未指定。
我是否应该使用#!
行启动脚本,如果我希望它符合POSIX标准?
答案 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]
我的建议是始终提供#!
行 - 这是一个支付确定性的小代价。如果由于某种原因不需要该行,那么它只是一个注释,因为它开始#
。