Estou escrevendo um conjunto de scripts bash.
A primeira wrapper
chama dois scripts: do_something
e do_something_else
.
Em pseudocódigo:
$ wrapper
do_something
if exitcode of do_something = 0 then
do_something_else
else
exit with error
fi
exit success
Isso geraria um arquivo de log:
$ cat /var/logs/wrapper.log | tail -3
Deleting file 299
Deleting file 300
wrapper ran successfully on 01/01/18 00:01:00 GMT
Eu tenho dois objetivos:
- criar um log de todo o processo. Em outras palavras, tudo o que
do_something
,do_something_else
ewrapper
enviar para stdout e stderr eu quero em um arquivo de log que mostre a execução diária deste script para que eu possa grep em busca de erros. - Eu quero pré-compilar
do_something
,do_something_else
ewrapper
assim posso colocá-los/usr/bin
e colocá-scp
los em todos os meus sistemas. Dessa forma, tenho uma fonte em dev e um código não editável de execução rápida em prod.
Isso é possível?
Aqui está uma amostra de como lidar com esse cenário em um script, sem perder a funcionalidade que o OP deseja, que é:
capacidade de executar vários blocos de lógica, todos eles, de uma vez ou um de cada vez.
Capacidade de registrar essas ações em um arquivo.
Este é um exemplo simples. Se você tratar a linguagem de script como faria com qualquer outra linguagem e escrever um código organizado, de repente poderá fazer todo tipo de coisa com ela. O truque é não deixar blocos de lógica solta fora das funções, dessa forma você pode alternar as coisas facilmente, usar uma peça, não a outra, depurar seções, adicionar uma função de registro, que é o que eu faria normalmente, error_handler( ), e assim por diante. Com quase nenhum trabalho extra, ou seja, você acaba com um aplicativo simples, mas limpo e fácil de manter, não um monte de linhas de ações aleatórias empilhadas umas sobre as outras.
arquivo: minhas_coisas
Você executaria isso assim:
É claro que este é apenas um exemplo, mas na verdade tudo o que você faz é organizar a lógica, organizá-la da maneira que faria com qualquer linguagem e, em seguida, acionar as ações desejadas. Acho que se eu iniciar os scripts de shell assumindo que eles serão usados e mantidos, e se eu os escrever usando funções, eles serão tão flexíveis e fáceis de manter quanto qualquer outra programação que eu fizer.
Sobre a parte de tudo para um arquivo de log: use
exec
para redirecionar stdout & stderr, aquidate
é usado para colocar a data no nome do arquivo de log: