Perl e Ruby exit
realmente saem:
$ perl -e 'BEGIN {print 1; exit}; END {print 2}'
1
$ ruby -e 'BEGIN {print 1; exit}; END {print 2}'
1
Não é assim para Awk:
$ awk 'BEGIN {print 1; exit}; END {print 2}'
1
2
Eu tentei resolver isso com um "help.awk"
function really_exit() {
IM_SURE = 1
exit
}
END {
if (IM_SURE) {
exit
}
}
mas isso cria seu próprio problema. Se "prog.awk" tiver apenas o bloco inicial:
BEGIN {
print "start"
}
Em seguida, execute-o:
awk -f help.awk -f prog.awk
fará com que ele trave esperando pela entrada. Existe uma solução melhor disponível para realmente sair de um script Awk?
Se um programa Awk tiver um "meio" ou
END
bloco, a entrada será lida. Podemos combater isso fornecendo uma entrada nula:Se quisermos que este seja o padrão, podemos adicionar um bloco a "help.awk":
No entanto, isso cria uma mudança importante; O awk não lerá do terminal, a menos que você adicione um traço:
ou modifique "prog.awk":
Exemplo de entrada de leitura:
Exemplo de não leitura da entrada: