Quero testar se a saída de uma função corresponde ao texto que imagino que ela deva escrever na saída padrão. Mas o código abaixo nunca imprime test PASS
e não consigo descobrir o porquê. Também tentei colocar vários \n
caracteres ou excluí-los na variável GROUND_TRUTH
, mas isso não ajudou.
error_out()
{
printf "%s\n" "${ERROR}"
printf "Return to exit\n"
read -r THROW_AWAY
exit
}
ERROR="Test output."
OUTPUT_TO_TEST=$(error_out)
GROUND_TRUTH="Test output.\nReturn to exit\n"
{ [ "${OUTPUT_TO_TEST}" = "${GROUND_TRUTH}" ] \
&& printf "error_out test PASS\n"; } \
|| { \
printf "error_out test FAIL\n"; \
}
Você tem dois problemas:
O resultado de uma substituição de comando
$(...)
nunca terminará com a LF(pois eles são aparados pelo shell). Portanto, suaGROUND_TRUTH
variável não deve terminar com aLFO shell não entende
\n
como uma sequência de escape para o LFcaractere. Como você está mirando em um shell POSIX, você terá que usar um real LFem seu literal de string.Então, a correção mínima que fará seu código funcionar como esperado seria substituir:
com: