Código de saída do awkward awk

1

Estou escrevendo alguns scripts awk para validação de dados. Estes destinam-se a ser selecionados e invocados por outro proces que precisa ver o código de saída do script awk para determinar se o conteúdo é válido ou não. Mas estou com problemas para ler a saída do código de saída:

Eu escrevi este script para tentar reproduzir o programa e executá-lo ...

#!/bin/awk -f

BEGIN { exit 1 }

$ ./test.sh ; echo $?
0

Eu esperava que a saída fosse 1. Suspeitando imediatamente que o awk estava errado e eu estava certo, tentei fazer isso:

$ awk 'BEGIN { exit 1 }' ; echo $?
1

Então, a saída do awk faz sem fazer o que eu quero, mas não quando executado a partir de um script shebang.

Eu então tentei:

#!/bin/env awk -f 

BEGIN { exit 1 }

$ ./test.sh ; echo $?
0
/bin/env: awk -f: No such file or directory

Enquanto eu pude fazer isso ...

#!/bin/sh

awk 'BEGIN { exit 1 }'

$ ./test.sh ; echo $?
1

Perco então toda a sintaxe destacando / manipulação do script (acima de 200 linhas) no vi.

Mais uma vez, outra opção seria:

#!/bin/sh

awk -f $1
exit $?

Mas isso requer o gerenciamento do caminho para o script awk, assim como o executável do wrapping ($ {BASH_SOURCE [0]} só funciona para o bash).

O ideal é que eu também queira também configurar a opção '-W posix' para o awk, mas isso adiciona outras complicações!

Atualizar

Executando o primeiro script acima no OpenSuse 13 / awk 4.1.0 Eu recebo o resultado esperado (infelizmente isso não resolve o problema)

    
por symcbean 14.08.2015 / 17:17

1 resposta

1

Você não mencionou em qual sistema operacional você está rodando ou qual versão do awk está usando, mas ao tentar reproduzir seu problema no meu host Linux com o GNU awk (4.1.1), ele funciona bem para mim. Dado:

#!/bin/awk -f 

BEGIN { exit 1 }

Quando, quando colocado em um arquivo test.sh , resulta em:

$ ./test.sh
$ echo $?
1

Concordo com o comentador que disse que test.sh é um nome estranho para um script awk . Eu iria com uma extensão .awk para deixar claro que não é realmente um script de shell.

Atualizar

No RHEL 6.7:

$ rpm -q redhat-release-server
redhat-release-server-6Server-6.7.0.3.el6.x86_64

com o awk:

$ awk --version
GNU Awk 3.1.7

Tudo parece bem. O script:

$ cat test.awk
#!/bin/awk -f

BEGIN {exit 1}

O resultado:

$ ./test.awk
$ echo $?
1
    
por 14.08.2015 / 17:40