Qual é o significado do valor de retorno 127 de $? no UNIX.
Qual é o significado do valor de retorno 127 de $? no UNIX.
Respostas:
O valor 127 é retornado /bin/sh
quando o comando fornecido não é encontrado na PATH
variável do sistema e não é um comando shell interno. Em outras palavras, o sistema não entende seu comando, porque não sabe onde encontrar o binário que você está tentando chamar.
which [program]
para ver qual binário o sistema operacional está usando. Se aparecer vazio, o próximo passo é verificar o bit de execução e o PATH.
which
não é particularmente preciso - não conhece aliases, funções de shell, memorização de pesquisa PATH ou outros fatores internos ao estado do shell. Muito melhor para usar type
, um shell embutido que sabe sobre todas essas coisas.
126
( Permission denied
), não 127
quando tento invocar um arquivo não executável (independentemente de seu conteúdo); Da mesma forma, uma tentativa de executar um diretório também resulta em 126
( is a directory
).
127 - command not found
exemplo: $ caat A mensagem de erro será
bash:
caat: comando não encontrado
agora você verifica usando echo $?
Uma convenção de shell é que um executável bem-sucedido deve sair com o valor 0. Qualquer outra coisa pode ser interpretada como uma falha de algum tipo, em parte do bash ou no executável que você acabou de executar. Consulte também $ PIPESTATUS e a seção EXIT STATUS da página do manual do bash:
For the shell’s purposes, a command which exits with a zero exit status has succeeded. An exit status of zero indicates success. A non-zero exit status indicates failure. When a command terminates on a fatal signal N, bash uses the value of 128+N as the exit status.
If a command is not found, the child process created to execute it returns a status of 127. If a com-
mand is found but is not executable, the return status is 126.
If a command fails because of an error during expansion or redirection, the exit status is greater than
zero.
Shell builtin commands return a status of 0 (true) if successful, and non-zero (false) if an error
occurs while they execute. All builtins return an exit status of 2 to indicate incorrect usage.
Bash itself returns the exit status of the last command executed, unless a syntax error occurs, in
which case it exits with a non-zero value. See also the exit builtin command below.
Não tem um significado especial, exceto que o último processo a sair o fez com um status de saída 127.
No entanto, também é usado pelo bash (assumindo que você esteja usando o bash como um shell) para informar que o comando que você tentou executar não pôde ser executado (ou seja, não foi encontrado). Infelizmente, não é imediatamente dedutível, se o processo saiu com o status 127 ou se não foi encontrado.
EDIT:
Não é dedutível imediatamente, exceto pela saída no console, mas isso está excedendo a pilha, então suponho que você esteja fazendo isso em um script.
Este erro também às vezes engana. Ele diz que o arquivo não foi encontrado, embora os arquivos estejam realmente presentes. Pode ser por causa de caracteres especiais ilegíveis inválidos presentes nos arquivos que podem ser causados pelo editor que você está usando. Esse link pode ajudá-lo nesses casos.
-bash: ./my_script: / bin / bash ^ M: intérprete incorreto: esse arquivo ou diretório não existe
A melhor maneira de descobrir se é esse problema é simplesmente colocar uma instrução de eco no arquivo inteiro e verificar se o mesmo erro foi gerado.
Se você estiver tentando executar um programa usando uma linguagem de script, pode ser necessário incluir o caminho completo da linguagem de script e o arquivo a ser executado. Por exemplo:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Se a JCL do mainframe IBM tiver alguns caracteres ou números extras no final do nome do script unix que está sendo chamado, poderá gerar esse erro.