Códigos de saída no Linux [explicado]
Desvendando o mistério dos códigos de saída no Linux. Saiba quais são os códigos de saída e por que e como eles são usados.
Um código de saída ou status de saída nos informa sobre o status do último comando executado. Se o comando foi concluído com sucesso ou terminou com erro. Isso é obtido após o término do comando.
A ideologia básica é que os programas retornem o código de saída 0
para indicar que foram executados com sucesso e sem problemas. O código 1
ou qualquer coisa diferente de 0 é considerado malsucedido.
Existem muitos outros códigos de saída além de 0 e 1, que abordarei neste artigo.
Vários códigos de saída no shell do Linux
Vamos dar uma olhada rápida nos códigos de saída proeminentes no shell do Linux:
0
-
Comando executado sem erros
1
Código para erros genéricos
2
Uso incorreto de comando (ou argumento)
126
Permissão negada (ou) incapaz de executar
127
Comando não encontrado ou erro PATH
128+n
Comando encerrado externamente pela passagem de sinais ou encontrou um erro fatal
130
Encerramento por Ctrl+C ou SIGINT (código de encerramento 2 ou interrupção do teclado)
143
Rescisão por SIGTERM (rescisão padrão)
255/*
O código de saída excedeu o intervalo de 0 a 255 e, portanto, foi encerrado
Os sinais de terminação como
130
(SIGINT ou^C) e
143
(SIGTERM) são proeminentes, que são apenas128+n
sinais comn
representando o código de terminação.< /p>
Agora que você está brevemente familiarizado com os códigos de saída, vamos ver como eles são usados.
Recuperando o código de saída
O código de saída do comando executado anteriormente é armazenado na variável especial $?
. Você pode recuperar o status de saída executando:
echo $?
Isso será usado em todas as nossas demonstrações para recuperar o código de saída.
Observe que o comando exit suporta carregar o mesmo código de saída do comando executado anteriormente.
Código de saída 0
O código de saída 0
significa que o comando é executado sem erros. Este é idealmente o melhor caso para a conclusão de comandos.
Por exemplo, vamos executar um comando básico como este
neofetch
echo $?
Este código de saída 0
significa que o comando específico foi executado com sucesso, nem mais nem menos. Vamos demonstrar mais alguns exemplos.
Você pode tentar encerrar um processo; também retornará o código 0
.
pkill lxappearance
A visualização do conteúdo de um arquivo também retornará um código de saída 0, o que implica apenas que o comando 'cat' foi executado com sucesso.
Código de saída 1
O código de saída 1
também é comum. Geralmente significa que o comando foi encerrado com um erro genérico.
Por exemplo, usar o gerenciador de pacotes sem permissões sudo resulta no código 1. No Arch Linux, se eu tentar isto:
pacman -Sy
Isso me dará o código existente como 1, o que significa que o último comando resultou em erro.
Se você tentar isso em distros baseadas no Ubuntu (
apt update
sem sudo), você receberá 100 como um código de erro para executar o 'apt' sem permissões. Este não é um código de erro padronizado, mas específico do apt.
Embora este seja um entendimento geral, também podemos interpretar isto como “operação inadmissível”.
Operações como dividir por zero também resultam no código 1.
Código de saída 2
Este código de saída é fornecido quando o comando executado apresenta um erro de sintaxe. O uso indevido dos argumentos dos comandos também resulta neste erro.
Geralmente sugere que o comando não pôde ser executado devido ao uso incorreto.
Por exemplo, adicionei dois hífens a uma opção que deveria ter um hífen. O código 2 foi distribuído.
grep --z file.txt
Quando a permissão é negada, como acessar a pasta /root, você recebe o código de erro 2.
Código de saída 126
126 é um código de saída peculiar, pois é usado para indicar que um comando ou script não foi executado devido a um erro de permissão.
Este erro pode ser encontrado quando você tenta executar um script de shell sem conceder permissões de execução.
Observe que esse código de saída aparece apenas para a 'execução' de scripts/comandos sem permissões suficientes, o que é diferente de um erro genérico de Permissão negada.
Portanto, não confunda com o exemplo anterior que você viu com o código de saída 2. Lá, o comando ls foi executado e o problema de permissão veio com o diretório que ele estava tentando executar. Aqui, os problemas de permissão vieram do próprio script.
Código de saída 127
Este é outro comum. O código de saída 127 refere-se a “comando não encontrado”. Geralmente ocorre quando há um erro de digitação no comando executado ou o executável necessário não está na variável ` PATH.
Por exemplo, muitas vezes vejo esse erro quando tento executar um script sem seu caminho.
Ou quando o arquivo executável que você está tentando executar não está listado na variável ` PATH
. Você pode corrigir isso adicionando o diretório pai à variável PATH.
Você também receberá esse código de saída ao digitar comandos que não existem.
Código de saída série 128+n
Quando uma aplicação ou comando é encerrado ou sua execução falha devido a um erro fatal, é produzido o código adjacente a 128 (128+n), onde n é o número do sinal.
Isso inclui todos os tipos de códigos de terminação, como SIGTERM
, SIGKILL
, etc., que se aplicam ao valor 'n' aqui.
Código 130 ou SIGINT
SIGINT
ou Sinalnal para Teclado Interro é induzido pela interrupção do processo pelo sinal de terminação 2, ou por Ctrl +C.
Como o sinal de terminação é 2, obtemos um código 130 (128+2). Aqui está um vídeo demonstrando o sinal de interrupção para lxappearance
.
Terminação SIGINT(2) ou interrupção de teclado (^C) que fornece o código 130
Código 137 ou SIGKILL
O sinal de terminação SIGKILL
que matao processo instantaneamente tem um sinal de terminação 9. Este é o último método que se deve usar ao encerrar uma aplicação .
O código de saída lançado é 137, pois o sinal de terminação é 9 (128+9).
Terminação SIGKILL(9) que fornece o código 137
Código 143 ou SIGTERM
SIGTERM
ou Signnal to Terminate é o comportamento padrão quando um processo é encerrado sem especificar argumentos.
O código de terminação do SIGTERM é 15, portanto este sinal recebe um código de saída 143 (128+15).
Terminação SIGTERM(15) que fornece o código 143
Existem outros sinais de encerramento que você talvez não conhecesse antes; eles também têm seus próprios códigos de saída semelhantes a estes. Você pode vê-los aqui:
Observe que esses sinais podem não aparecer se forem encerrados na mesma sessão em que o processo foi iniciado. Se você estiver reproduzindo isso, encerre em um shell diferente.
A título pessoal, o sinal 128 era impossível de reproduzir.
E se o código exceder 255?
Versões recentes do Bash mantêm o valor do código de saída original mesmo além de 255, mas geralmente, se o código exceder 255, ele será encerrado.
Ou seja, o código 256 torna-se '0', 257 torna-se '1', 383 torna-se '127' e assim por diante. Para garantir melhor compatibilidade, mantenha os códigos de saída entre 0 e 255.
Empacotando
Espero que você tenha aprendido algo sobre os códigos de saída no shell do Linux. Usá-los pode ser útil para solucionar vários problemas.
Se você estiver usando esses códigos em um script de shell, certifique-se de entender o significado de cada código para facilitar a solução de problemas.
Caso precise de uma referência, confira a série Bash aqui:
Isso é tudo sobre o artigo. Sinta-se à vontade para me informar na seção de comentários se eu perdi alguma coisa.