Você não precisa do teste de $?
, pois &&
funciona se $?
for zero e ||
for processado no caso de um valor de retorno diferente de zero.
E você não precisa de menos, já que o valor de retorno a ser feito é retirado da última chamada de programa da linha. Então isso funciona bem
falha:
@/bin/false && echo "success!" || echo "failure!"
sucesso:
@/bin/true && echo "success!" || echo "failure!"
O oposto acontece: Se você quer fazer sua própria mensagem e quer quebrar o processo de make de qualquer forma com um valor diferente de zero, você precisa escrever algo assim:
falha:
@/bin/false && echo "success!" || { echo "failure!"; exit 1; }