xslt shbang: Usando xslt da linha de comando

3

Escrevi (tolamente?) um par de xslt de propósitos moderadamente genéricos  scripts.

Eu gostaria muito de transformá-los em executáveis que leiam um documento xml de padrão ou similar.

A maneira como você faz isso com outros idiomas é usar um shbang .

Existe uma maneira fácil / padrão de fazer isso com xsltproc e amigos? Claro que eu poderia hackear um wrapper em torno de xsltproc que puxa a primeira linha de comentário ... mas se houver algo que se aproxime de um padrão, seria melhor usar isso.

    
por Att Righ 01.11.2017 / 03:53

2 respostas

3

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
    
por 01.11.2017 / 11:14
2

Não há como alterar uma folha de estilo XSLT em um executável usando um shebang.

    
por 01.11.2017 / 06:22