Você está chamando exit de BEGIN{} , isso significa que qualquer coisa que não esteja em um BEGIN{} ou END{} anterior não será executada.
Mesmo sem a saída, seu código
{ pkginfo("test") }
não será executado até que uma linha de entrada (stdin) esteja disponível, é assim que o awk funciona. Você poderia contornar isso chamando uma função com seu código ( main() , por exemplo) com seu código e, em seguida, exit no final do último bloco BEGIN .
awk é um propósito bastante geral, mas realmente quer ler linhas de entrada e combiná-las com padrões. É por isso que seu código parece travar,.
Ou você pode usar
BEGIN { pkginfo("test") }
embora você possa precisar entender a ordem de todos os blocos BEGIN . Ou, se você chamar exit no final do% finalBEGIN, poderá colocar seu código em um bloco END{} . Nenhuma entrada será esperada se você tiver apenas BEGIN / END blocks.
Como você está rodando em um sistema Linux, é bem provável que esteja usando gawk em vez de um awk ( nawk , mawk ou similar), quase certamente porque -e também é gawk versão 4 extensão ;-)
Nesse caso, você pode usar @include , o que elimina algum código. Caso contrário, para qualquer outro awk thes script wrapper igawk parece um caminho mais limpo para realizar incluem capacidade.