Sistema de construção para scripts de shell

1

No meu local de trabalho, há um script Bash que é usado para listar os bancos de dados Oracle em execução em um farm. Eu fiz algumas modificações, usando algum código Python (ex: python -c "import sys..." ).

Ele cresceu consideravelmente e me levou a pensar em usar um sistema de compilação para o script. Idealmente, o sistema de compilação permitirá que eu escreva o código python em um arquivo separado e, em seguida, coloque tudo junto em um script unificado. Um script unificado ajudará a simplificar os procedimentos de implantação.

Além disso, o sistema de compilação deve remover qualquer comentário para reduzir o tamanho do script, mas essa é provavelmente a parte mais fácil.

Se nada existir, vou reservar um tempo para escrever um. Eu estava pensando que, mesmo que existam ferramentas genéricas de construção (independentes de linguagem), eu gostaria de usá-las.

    
por Avindra Goolcharan 09.01.2015 / 16:24

1 resposta

0

Sinto-me errado em responder isso, mas aqui está:

A essência é que um Makefile é a ferramenta certa para esse trabalho, e você pode escapar da shell escapando com a sintaxe here-string.

base_script.sh

# some script...

xargs -0 python -c <<'PYTHON_SCRIPT_asdlfkjhsldjkhf'
PYTHON_SCRIPT_asdlfkjhsldjkhf

# more script ...

Makefile

merged_script.sh: base_script.sh python_script.py
    { sed -ne '0,/PYTHON_SCRIPT_/p' base_script.sh; \
      sed -e SOME_REGEX_TO_STRIP_COMMENTS python_script.py; \
      sed -ne '/^PYTHON_SCRIPT_/,999999999p' base_script.sh; \
    } > merged_script.sh

Basicamente, ele captura a metade superior do shell script, em seguida, une o script python e, em seguida, anexa a metade inferior do script. O script python é colocado em uma string here, então você não precisa se preocupar com qualquer shell escapando. Você precisa ter certeza de que a string não ocorra no código python, mas isso não deve ser um problema real. Você também precisa manter o script python menor que o limite máximo de argumentos, mas você já teve esse problema.

Escrever o regex para remover comentários em python é deixado como um exercício.

Os comandos sed para capturar a metade superior e inferior do script são desleixados e podem ser substituídos por algum outro script de utilitário para unir arquivos. Eu sugiro escrevê-lo em python, pois é com isso que você se sente confortável.

    
por 09.01.2015 / 19:15