17.89. shebangfix
可能的参数:(无)
很多软件使用了不正确的脚本解释器位置,最明显的是 /usr/bin/perl 和 /bin/bash 。shebangfix 宏可以修复列在 SHEBANG_REGEX
、SHEBANG_GLOB
或 SHEBANG_FILES
中的脚本的 shebang 行。
SHEBANG_REGEX
包含了一个扩展的正则表达式,并与 find(1) 的 -iregex
参数一起使用。 参见 USES=shebangfix
与 SHEBANG_REGEX
。
SHEBANG_GLOB
包含一个与 find(1) 的 -name
参数一起使用的模式列表。参见 USES=shebangfix
与 SHEBANG_GLOB
。
SHEBANG_FILES
包含一个文件或 sh(1) globs 的列表。shebangfix 宏从 ${WRKSRC}
开始运行,因此 SHEBANG_FILES
可以包含相对于 ${WRKSRC}
的路径。如果 ${WRKSRC}
以外的文件需要修补,它也可以处理绝对路径。参见 USES=shebangfix
与 SHEBANG_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_ENV
,CONFIGURE_ARGS
,MAKE_ENV
, 或MAKE_ARGS
) 来生成正确的 shebangs。支持的解释器的正确路径可以在
_interp__CMD
中找到。
技巧
当与
USES=python
一起使用时,如果目的只是为了修复剪贴板,而不希望依赖 Python 本身,请使用PYTHON_NO_DEPENDS=yes
。
例子10. 在
USES=shebangfix
中添加另一个解释器要添加另一个解释器,请设置
SHEBANG_LANG
。比如说:
例子11. 为
USES=shebangfix
添加解释器时指定所有的路径如果还没有定义,而且
_interpOLD_CMD
和_interpCMD
没有默认值,那么 Ksh 条目可以定义为:
例子12. 为解释器添加一个奇怪的位置
一些软件为解释器使用了奇怪的位置。例如,一个应用程序可能希望 Python 位于 /opt/bin/python2.7 的位置。要替换的奇怪路径可以在 port 的 Makefile 中声明:
例子13.
USES=shebangfix
与SHEBANG_REGEX
要修复
${WRKSRC}/scripts
中所有以 .pl 、.sh 或 .cgi 结尾的文件,请执行以下操作:注意
SHEBANG_REGEX
是通过运行find -E
来使用的,它使用现代正则表达式,也被称为扩展正则表达式。更多信息见 re_format(7)。
例子14.
USES=shebangfix
与SHEBANG_GLOB
要修复
${WRKSRC}
中所有以 .pl 或 .sh 结尾的文件,请执行:
例子15.
USES=shebangfix
withSHEBANG_FILES
要修复 ${WRKSRC} 中的 script/foobar.pl 和 script/*.sh 文件,请执行:
最后更新于