Check in bash se make fez algo

1

Estou chamando make de um script bash. Parte do restante do script só precisa ser executada se make realmente fez alguma coisa (ou seja, não diz nothing to be done for... ).

Como eu verificaria isso em bash? O código de retorno é o mesmo de quando algo faz acontecer (e não falha), então não posso usar isso. Existe uma maneira melhor do que comparar a saída de make e ver se ela contém nothing to be done for ?

Estou usando o GNU Make 4.0.

    
por Keelan 11.12.2015 / 10:32

2 respostas

5

Se o seu fluxo de trabalho puder acomodá-lo, você poderá enviar make em uma avaliação antes de executá-lo para atualizar os arquivos:

-q, --question

‘‘Question mode’’. Do not run any commands, or print anything; just return an exit status that is zero if the specified targets are already up to date, nonzero otherwise.

(Surpreende-me que isto não faça parte do comportamento de --recon ).

    
por 11.12.2015 / 11:15
1

Eu acredito que isso vai fazer o que você quiser. Testado com o GNU grep.

mk_output=$(make)   # add whatever make options you use
if printf '%s\n' "$mk_output" | grep -qF 'Nothing to be done for'
then
    echo '"Nothing to be done for" was present in output'
else
    echo '"Nothing to be done for" was NOT present in output'
fi

Nós capturamos a saída de make , depois grep (opções silenciosas e fixas string) para a string que você está procurando. Se encontrado, o status de saída grep é 0; se não encontrado, 1.

Reflexões:

make geralmente gera muita saída, por isso, talvez seja melhor alterar a primeira linha para:

mk_output=$(make (make options) | grep -qF 'Nothing to be done for')

Dessa forma, mk_output não será tão grande.

Se você quiser ver a saída de make em execução, bem como capture-o, use tee para capturar em um arquivo:

make | tee make_output
if grep -qF 'Nothing to be done for' make_output
then etc.
    
por 11.12.2015 / 10:58