127 Codice di ritorno da $?


Risposte:


428

Il valore 127 viene restituito /bin/shquando il comando dato non viene trovato nella PATHvariabile di sistema e non è un comando shell incorporato. In altre parole, il sistema non capisce il tuo comando, perché non sa dove trovare il binario che stai cercando di chiamare.


55
Questo succede anche se uno script bash non ha la modalità "+ x" ma esiste davvero.
MatthewKremer

3
Puoi provare a usare which [program]per vedere quale binario sta usando il sistema operativo. Se risulta vuoto, il passaggio successivo è il controllo del bit di esecuzione e del PERCORSO.
quattro43,

10
@ cr125rider, whichnon è particolarmente preciso - non conosce alias, funzioni della shell, memoization di ricerca PATH o altri fattori interni allo stato della shell. Molto meglio da usare type, una shell integrata che conosce tutte queste cose.
Charles Duffy,

5
Questo è successo anche a me con un file con feed di linea di Windows. Correggere le terminazioni di linea in formato unix risolto il problema
Mitkins,

4
@MatthewKremer: In realtà, ottengo 126( Permission denied), non 127quando provo a invocare un file non eseguibile (indipendentemente dal suo contenuto); allo stesso modo, anche un tentativo di eseguire una directory risulta in 126( is a directory).
mklement0,

58

Generalmente significa:

127 - comando non trovato

ma può anche significare che il comando è stato trovato ,
ma NON è stata trovata una libreria richiesta dal comando .


14

127 - command not found

esempio: $ caat Il messaggio di errore lo farà

bash:

caat: comando non trovato

ora controlli usando echo $?


10

Una convenzione di shell è che un eseguibile di successo dovrebbe uscire con il valore 0. Qualsiasi altra cosa può essere interpretata come un errore di qualche tipo, da parte di bash o dell'eseguibile che hai appena eseguito. Vedi anche $ PIPESTATUS e la sezione EXIT STATUS della pagina man di 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.

8

Non ha alcun significato speciale, a parte il fatto che l'ultimo processo per uscire lo ha fatto con uno stato di uscita di 127.

Tuttavia, è anche usato da bash (supponendo che tu stia usando bash come shell) per dirti che il comando che hai provato ad eseguire non può essere eseguito (cioè non è stato trovato). Purtroppo, tuttavia, non è immediatamente deducibile se il processo è uscito con lo stato 127 o se non è stato trovato.

EDIT:
non immediatamente deducibile, ad eccezione dell'output sulla console, ma si tratta di uno stack overflow, quindi suppongo che lo stai facendo in uno script.


2

Questo errore è talvolta ingannevole. Dice che il file non viene trovato anche se i file sono effettivamente presenti. Potrebbe essere a causa di caratteri speciali illeggibili non validi presenti nei file che potrebbero essere causati dall'editor che si sta utilizzando. Questo link potrebbe aiutarti in questi casi.

-bash: ./my_script: / bin / bash ^ M: interprete errato: nessun file o directory

Il modo migliore per scoprire se è questo problema è semplicemente inserire un'istruzione echo nell'intero file e verificare se viene generato lo stesso errore.


1

Se si sta tentando di eseguire un programma utilizzando un linguaggio di scripting, potrebbe essere necessario includere il percorso completo del linguaggio di scripting e il file da eseguire. Per esempio:

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');

Grazie, ha funzionato per me. Quindi ho fatto quale gs e poi ho usato il percorso di output nel mio script. Ha funzionato ..
Juan

0

Se il mainframe IBM JCL ha alcuni caratteri o numeri extra alla fine del nome dello script unix che viene chiamato, può generare tale errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.