O status de saída do comando for
loop composto é o do último comando executado nele.
for cmd in true false; do
"$cmd"
done
Retorna falso (um status de saída diferente de zero) porque false
foi o último comando executado.
echo
retornará verdadeiro, contanto que consiga escrever com sucesso o que estamos dizendo.
Se você quiser retornar falso / falha se qualquer do comando tidy
falhar, você precisará registrar o falha, ou sair após a primeira falha:
#! /bin/bash -
shopt -s globstar
ok=true
for i in ./**/*.html; do
if tidy -mq "$i"; then
printf '%s\n' "$i"
else
ok=false
fi
done
"$ok"
ou:
#! /bin/bash -
shopt -s globstar
for i in ./**/*.html; do
tidy -mq "$i" || exit # if tidy fails
printf '%s\n' "$i"
done
Esse ainda pode retornar falso / falha se printf
falhar (por exemplo, quando stdout for para um arquivo em um sistema de arquivos que esteja cheio).
Se você quiser ignorar qualquer erro e seu script retornar verdadeiro / sucesso em qualquer caso, basta adicionar um true
ou exit 0
no final de seu roteiro.
¹ pelo menos para a parte body . Para for i in $(exit 42); do :; done
, a maioria dos shells retorna 0 (AT & T ksh sendo a exceção). Todos retornam 0 para for i in; do :; done < "$(echo /dev/null; exit 42)"
.