17.89. shebangfix

可能的参数:(无)

很多软件使用了不正确的脚本解释器位置,最明显的是 /usr/bin/perl/bin/bash 。shebangfix 宏可以修复列在 SHEBANG_REGEXSHEBANG_GLOBSHEBANG_FILES 中的脚本的 shebang 行。

SHEBANG_REGEX

包含了一个扩展的正则表达式,并与 find(1)-iregex 参数一起使用。 参见 USES=shebangfixSHEBANG_REGEX

SHEBANG_GLOB

包含一个与 find(1)-name 参数一起使用的模式列表。参见 USES=shebangfixSHEBANG_GLOB

SHEBANG_FILES

包含一个文件或 sh(1) globs 的列表。shebangfix 宏从 ${WRKSRC} 开始运行,因此 SHEBANG_FILES 可以包含相对于 ${WRKSRC} 的路径。如果 ${WRKSRC} 以外的文件需要修补,它也可以处理绝对路径。参见 USES=shebangfixSHEBANG_FILES

目前默认支持 Bash、Java、Ksh、Lua、Perl、PHP、Python、Ruby、Tcl 和 Tk。

有三个配置变量:

SHEBANG_LANG

支持的解释器列表。

_interp__CMD

FreeBSD 上的命令解释器的路径。默认值是 ${LOCALBASE}/bin/interp

_interp__OLD_CMD

错误调用解释器的列表。这些通常是过时的路径,或在其他操作系统上使用的路径,在 FreeBSD 上是不正确的。它们将被 _interp__CMD 中的正确路径所取代。

注意

这些 总是 interp__OLD_CMD 的一部分: "/usr/bin/env _interp" /bin/interp /usr/bin/interp /usr/local/bin/interp

技巧

_interp__OLD_CMD 包含多个值。任何带有空格的条目都必须加引号。参见USES=shebangfix 中添加解释器时指定所有路径

重要

对 shebangs 的修复是在 patch 阶段进行的。如果在 build 阶段创建的脚本带有不正确的 shebangs,则必须对构建过程 (例如 configure 脚本, 或 Makefiles ) 进行修补, 或给出正确的路径 (例如使用 CONFIGURE_ENVCONFIGURE_ARGSMAKE_ENV, 或 MAKE_ARGS) 来生成正确的 shebangs。

支持的解释器的正确路径可以在 _interp__CMD 中找到。

技巧

当与 USES=python 一起使用时,如果目的只是为了修复剪贴板,而不希望依赖 Python 本身,请使用 PYTHON_NO_DEPENDS=yes

例子10. 在 USES=shebangfix 中添加另一个解释器

要添加另一个解释器,请设置 SHEBANG_LANG 。比如说:

SHEBANG_LANG=	lua

例子11. 为 USES=shebangfix 添加解释器时指定所有的路径

如果还没有定义,而且 _interpOLD_CMD_interpCMD 没有默认值,那么 Ksh 条目可以定义为:

SHEBANG_LANG=	ksh
ksh_OLD_CMD=	"/usr/bin/env ksh" /bin/ksh /usr/bin/ksh
ksh_CMD=	${LOCALBASE}/bin/ksh

例子12. 为解释器添加一个奇怪的位置

一些软件为解释器使用了奇怪的位置。例如,一个应用程序可能希望 Python 位于 /opt/bin/python2.7 的位置。要替换的奇怪路径可以在 port 的 Makefile 中声明:

python_OLD_CMD=	/opt/bin/python2.7

例子13. USES=shebangfixSHEBANG_REGEX

要修复 ${WRKSRC}/scripts 中所有以 .pl.sh.cgi 结尾的文件,请执行以下操作:

USES=	shebangfix
SHEBANG_REGEX=	./scripts/.*\.(sh|pl|cgi)

注意

SHEBANG_REGEX 是通过运行 find -E 来使用的,它使用现代正则表达式,也被称为扩展正则表达式。更多信息见 re_format(7)

例子14. USES=shebangfixSHEBANG_GLOB

要修复 ${WRKSRC} 中所有以 .pl.sh 结尾的文件,请执行:

USES=	shebangfix
SHEBANG_GLOB=	*.sh *.pl

例子15. USES=shebangfix with SHEBANG_FILES

要修复 ${WRKSRC} 中的 script/foobar.plscript/*.sh 文件,请执行:

USES=	shebangfix
SHEBANG_FILES=	scripts/foobar.pl scripts/*.sh

最后更新于

FreeBSD 中文社区