OK, imaginei: o problema está nas diferentes definições do que é TRUE e FALSE entre o status de saída de test
e a condição while
do loop em awk
.
Um comando test
postivo resulta em um código de saída de 0
para TRUE e um negativo em 1
para FALSE.
No entanto, em awk
, o loop while
interpreta 0
como FALSE e 1
como TRUE, portanto, exatamente a definição oposta.
Como exemplo:
awk '{ while ( 0 ) ; { print "0" } }' file
não produzirá nenhuma saída, enquanto
awk '{ while (1) ; { print "1" } }' file
imprime 1
s infinito.
A melhor prática é, portanto, ser explícita em tal combinação
while ( system("command") == 0 )
ou
while ( system("command") == 1 )
respectivamente.
Então, no meu caso
while ( system("test -e " file ) == 0 )
mostra o comportamento esperado.