NidoBr
(usa Manjaro Linux)
Enviado em 11/11/2021 - 18:33h
msoliver escreveu:
NidoBr escreveu:
msoliver escreveu:
Nem todos comandos tem o "exit code".
Por exemplo:
Sed e awk.
______________________________________________________________________
Importante:
lynx --dump
https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando:
ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________
No manual do AWK, consta que ele possui código de saída e pode ser customizado com o comando "exit" interno do AWK, já o SED é normal retorna 0 se for bem sucedido e 1 caso contrario.
Exemplificando a minha afirmação!
cat ltr.txt
ABCDEFGHIJKLMNOPQRSTUVWXYZ
sed -r 's/[A-Z]/-ALTERADO-/' ltr.txt ;echo "Exit Code:$?"
-ALTERADO-BCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
sed -r 's/[0-9]/-ALTERADO-/' ltr.txt ;echo "Exit Code:$?"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
awk '$0~/^[0-9]+$/{print $0}' ltr.txt;echo "Exit Code:$?"
Exit Code:0
awk '$0~/^[A-Z]+$/{print $0}' ltr.txt;echo "Exit Code:$?"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
sed -r 's/[A-Z]/-ALTERADO-/' ltr.txt && echo ok || echo not
-ALTERADO-BCDEFGHIJKLMNOPQRSTUVWXYZ
ok
sed -r 's/[0-9]/-ALTERADO-/' ltr.txt && echo ok || echo not
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ok
sed -r 's/[A-Z]+/-ALTERADO-/' ltr.txt && echo ok || echo not
-ALTERADO-
ok
sed -r 's/[0-9]+/-ALTERADO-/' ltr.txt && echo ok || echo not
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ok
awk '$0~/^[0-9]+$/{print $0}' ltr.txt && echo ok || echo not
ok
awk '$0~/^[A-Z]+$/{print $0}' ltr.txt && echo ok || echo not
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ok
No Grep o comportamento é diferente:
grep -E '^[0-9]+' ltr.txt && echo ok || echo not
not
grep -E '^[A-Z]+' ltr.txt && echo ok || echo not
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ok
Essas situações são contornáveis!
Mas isso está fora do escopo!
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________
O SED e o AWK retornam '0' (sucesso) se o comando for "executado", e retornam um valor diferente de '0' se o comando não puder ser executado, como por exemplo se o arquivo não existir ou não tiver permissão para aquela ação. Mas no caso do SED e do AWK o comando é considerado "executado" independente se as instruções passadas a eles tiverem ou não sucesso.
Ex:
$ cat ltr.txt
ABCDEFGHIJKLMNOPQRSTUVWXYZ
# Arquivo existe, o comando foi executado e expressão corresponde:
sed -r 's/[A-Z]/-ALTERADO-/' ltr.txt ;echo "Exit Code:$?"
-ALTERADO-BCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
# Arquivo não existe, comando não foi executado:
$ sed -r 's/[A-Z]/-ALTERADO-/' ARQUIVO_NÃO_EXISTE.txt ;echo "Exit Code:$?"
sed: não foi possível ler ARQUIVO_NÃO_EXISTE.txt: Arquivo ou diretório inexistente
Exit Code:2
# Arquivo existe, comando executado mas expressão não correspondeu:
$ sed -r 's/[0-9]/-ALTERADO-/' ltr.txt ;echo "Exit Code:$?"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
# Arquivo existe, o comando foi executado e expressão corresponde:
$ awk '{print $0}' ltr.txt ;echo "Exit Code:$?"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:0
# Arquivo não existe, comando não foi executado:
$ awk '{print $0}' ARQUIVO_NÃO_EXISTE.txt ;echo "Exit Code:$?"
awk: fatal: não foi possível abrir arquivo "ARQUIVO_NÃO_EXISTE.txt" para leitura: Arquivo ou diretório inexistente
Exit Code:2
# Como tinha dito podemos definir um status de saída com a instrução 'exit' interna do AWK.
$ awk '{print $0} END {exit 23}' ltr.txt ;echo "Exit Code:$?"
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Exit Code:23
Espero que tenha dado para entender :-)