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