Combinando Script Bash e Recursos de Script em um Executável

1

Ao tentar executar um script Bash, ele geralmente é executado em algum diretório e requer acesso a recursos locais. Eu queria saber se havia uma maneira de combinar o script Bash e os recursos (tudo o mais no diretório) em um executável, para que eu só precisaria desse executável autônomo para executar o script Bash.

    
por UCLA 02.06.2016 / 00:36

1 resposta

1

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:

  1. A parte superior do script configura a execução da parte inferior
  2. No meio há um comando exit , para evitar a execução da parte final
  3. 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:

  1. Extraia a parte final (linha 10 e além) desse script em um diretório temporário, usando tar
  2. Imprima o conteúdo de local.txt , que é esperado no diretório temporário
  3. 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.

    
por janos 06.01.2017 / 18:48