Scripts de extração automática são possíveis e não incomuns. Eles são freqüentemente usados por instaladores. A ideia é simples:
- A parte superior do script configura a execução da parte inferior
- No meio há um comando
exit
, para evitar a execução da parte final - A parte final é uma carga útil
Aqui está um exemplo concreto. Crie script.sh
com este conteúdo:
#!/usr/bin/env bash
me=$(cd "$(dirname "$0")"; pwd)/"$(basename "$0")"
cd "$(mktemp -d)"
tail -n +10 "$me" | tar zx
cat local.txt
exit
Isso corresponde à parte superior e intermediária que mencionei anteriormente. Essencialmente isso faz:
- Extraia a parte final (linha 10 e além) desse script em um diretório temporário, usando
tar
- Imprima o conteúdo de
local.txt
, que é esperado no diretório temporário - Sair
Este script não está completo, precisamos adicionar a parte final, que deve ser um zip tar
, contendo um arquivo chamado local.txt
. Vamos criar esse arquivo primeiro:
echo hello world > local.txt
E vamos colocar esse arquivo em tar
e anexá-lo no final do script:
tar zc local.txt >> script.sh
Se você reabrir script.sh
em um editor de texto, verá alguns detalhes sem sentido no final. São dados binários, o conteúdo de um arquivo zip tar
com local.txt
. Se você executar este script, ele produzirá hello world
, do arquivo local.txt
incorporado que descompacta de si mesmo.
Você pode usar a mesma técnica para criar algo significativo e sofisticado.