Uma simplificação interessante para criação de arquivos .run!

O leitor Domingos Paraiso fez um comentário muito interessante a respeito do post “Criando arquivos .run no Linux – o jeito difícil (mas nem tanto!)“. Lá eu digo que você deve colocar o taamnho preciso do script que será a base do arquivo .run para que a porção binária do arquivo seja interpretada corretamente pelo tar. Acontece que isso não é necessário!

Você pode colocar um comentário (por exemplo, “###EOF###”) como marcador do final do script e usar grep, cuttail para obter a porção binária!!! A única precaução necessária é que o comentário usado como marcador precisa, necessariamente, ser a última linha do script.

Com o grep e cut você pode obter a linha onde a marca se encontra no script e assumir que a próxima “linha” é o início da porção binária, assim:

NEXT_LINE=$((`grep -n --binary-files=text '^###EOF###' "$SCRIPT" | cut -d: -f1` + 1))

A opção -n de grep retornará a linha do comantário “###EOF###”. É necessário usar a opção –binary-files=text para evitar que o grep dê o aviso que o arquivo não é “texto”. Esse grep devolve algo do tipo “20: ###EOF###”. Logo depois, usamos ‘:’ como separador para obter o número da linha apenas, via cut, e adicionamos 1 a esse valor.

Uma vez obtida a linha onde começa o arquivo tar basta fazer:

tail -n +$NEXT_LINE "$SCRIPT"| tar xz -C "$MYDIR"

De posse da linha onde começa o tarball, base usar tail para obter apenas a parte binária do arquivo .run: A opção -n é usada para listar as últimas ‘n’ linhas de um arquivo, mas, se usarmos um ‘+’ no número da linha, tail listará todo o arquivo a partir da linha fornecida. Ou seja, apenas a parte binária do script será colocada na saída de tail… Dessa forma, tail passará para o tar, via pipe, a porção binária e temos o nosso arquivo .tar.gz descompactado no diretório $MYDIR, como queriamos… SEM A NECESSIDADE DE CONHECERMOS O TAMANHO DO SCRIPT!!

Voilà! Ume excelente dica! Thanks a lot, Domingos!

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s