Att*_*igh 3 scripting xml executable shebang interpreter
我已经(愚蠢地?)写了几个中等通用的xslt 脚本。
我很想将这些转换为从标准输入或类似内容读取 xml 文档的可执行文件。
使用其他语言执行此操作的方法是使用shbang。
有没有一种简单/标准的方法可以用 xsltproc 和朋友来做到这一点?当然,我可以在 xsltproc 周围编写一个包装器,从第一条注释行开始……但如果有一些接近标准的东西,这会更好用。
您可以使用通用binfmt-misc内核模块来处理运行可执行文件时使用的解释器。它通常用于允许您运行外部架构文件而无需使用qemu
或作为前缀wine
,但可用于识别文件头中的任何魔术字符序列,甚至是给定的文件扩展名,如*.xslt
. 请参阅内核文档。
例如,如果您有一个demo.xslt
以字符开头的文件
<xsl:stylesheet version=...
Run Code Online (Sandbox Code Playgroud)
您可以要求模块识别<xsl:stylesheet
文件中偏移量 0 处的字符串,并/usr/bin/xsltproc
以 root 身份运行
colon=$(printf '\\x%02x' \':) # \x3a
echo ":myxsltscript:M::<xsl${colon}stylesheet::/usr/bin/xsltproc:" >/etc/binfmt.d/myxslt.conf
cat /etc/binfmt.d/myxslt.conf >/proc/sys/fs/binfmt_misc/register
Run Code Online (Sandbox Code Playgroud)
/etc
除非您希望在重新启动时保留设置,否则您不需要通过该文件。如果您没有该/proc
文件,则需要先挂载它:
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
Run Code Online (Sandbox Code Playgroud)
现在,如果您chmod +x demo.xslt
可以demo.xslt
使用任何参数运行xsltproc
,它将使用demo.xslt
作为额外第一个参数提供的文件名运行。
要撤消设置,请使用
echo -1 >/proc/sys/fs/binfmt_misc/myxsltscript
Run Code Online (Sandbox Code Playgroud)