Você pode usar o módulo genérico binfmt-misc do kernel que manipula qual interpretador é usado quando um arquivo executável é executado. É normalmente usado para permitir que você execute arquivos de arquitetura estrangeiros sem precisar prefixá-los com qemu
ou wine
, mas pode ser usado para reconhecer qualquer sequência de caracteres mágica em um cabeçalho de arquivo, ou até mesmo uma determinada extensão de nome de arquivo, como *.xslt
. Veja a documentação do kernel documentation .
Por exemplo, se você tiver um arquivo demo.xslt
que comece com os caracteres
<xsl:stylesheet version=...
você pode pedir ao módulo para reconhecer a string <xsl:stylesheet
no offset 0 no arquivo e executar /usr/bin/xsltproc
fazendo como 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
Você não precisa acessar o arquivo /etc
, a menos que queira que a configuração seja preservada durante a reinicialização. Se você não tiver o arquivo /proc
, será necessário montá-lo primeiro:
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
Agora, se você chmod +x demo.xslt
puder executar demo.xslt
com qualquer args e ele executará xsltproc
com o nome de arquivo demo.xslt
fornecido como um primeiro argumento extra.
Para desfazer a configuração, use
echo -1 >/proc/sys/fs/binfmt_misc/myxsltscript