como obter o comportamento indicado para o comando system () do awk? [duplicado]

1

Eu estou chamando o comando sleep do awk assim: system("sleep 15m") e descobri que quando eu interrompo isso com CTRL-C, ele apenas interrompe o comando sleep, não o script. Então, tentei configurar a função do sistema em uma instrução if, como sugerido neste exemplo de script e mais adiante explicado aqui . Em seguida, parece com if (system("sleep 15m") != 0) exit 1 .

Isso não funcionou, então eu tentei print system("sleep 3") , que sempre retorna 0, ao contrário do comportamento declarado. Digitar sleep 3 then echo $? no shell produz 0 se eu deixar que ele seja executado e 130 se eu o interromper.

Então, o que estou perdendo? Eu verifiquei erros de digitação várias vezes, tentei os switches --posix e --traditional, e estudei o guia do usuário, nada muda isso.

$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
Copyright (C) 1989, 1991-2015 Free Software Foundation.
    
por Keith 06.08.2018 / 23:14

1 resposta

1

Parece ser um bug gawk

$ echo foo | gawk '{print system("sleep 3")}'
^C0
$ 

Parece relacionado a Faça bash sair! = 0 quando chamado pelo AWK e interrompido com ^ C

Solução alternativa do gawk, cortesia de Keith

$ echo foo | awk '{if(system("sleep 3 && exit 42")==42){print "completed"}else{print "interrupted"}}'
completed
$ echo foo | awk '{if(system("sleep 3 && exit 42")==42){print "completed"}else{print "interrupted"}}'
^Cinterrupted
$

nawk lida corretamente

$ echo foo | nawk '{print system("sleep 3")}'
^C0.0078125
$
    
por 06.08.2018 / 23:28