2009-11-19 12 views

risposta

273

Il valore 127 viene restituito da /bin/sh quando il comando specificato non viene trovato nella variabile di sistema PATH e non è un comando di shell incorporato. In altre parole, il sistema non capisce il tuo comando, perché non sa dove trovare il file binario che stai cercando di chiamare.

+24

Questo accade anche se uno script di bash non ha la modalità "+ x" ma effettivamente esiste. – MatthewKremer

+0

Si può provare a usare 'quale [programma]' per vedere quale binario viene utilizzato dal sistema operativo. Se risulta vuoto, il prossimo passo è il controllo del bit di esecuzione e del PERCORSO. – cr125rider

+7

@ cr125rider, 'which' non è particolarmente accurato - non conosce alias, funzioni della shell, memoizzazione della ricerca PATH, o altri fattori interni allo stato della shell. Molto meglio usare 'type', una shell incorporata che conosce tutte queste cose. –

6

Non ha un significato speciale, diverso da quello che l'ultimo processo per uscire ha fatto con uno stato d'uscita di 127.

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

MODIFICA:
Non immediatamente deducibile, tranne per l'output sulla console, ma questo è overflow dello stack, quindi presumo che lo stiate facendo in uno script.

6

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

127 - command not found

esempio: $ caat Il messaggio di errore

bash:

CAAT: command not found

ora di controllare usando echo $?

+0

esempio molto bello! – Victor

30

In generale significa:

127 - comando non trovato

ma può anche significare che il comando si trova,
ma una libreria richiesta da il comando NON è stato trovato.

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 del file da eseguire. Ad esempio:

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

Grazie, questo ha funzionato per me. Così ho fatto quale gs e poi ho usato il percorso di output nel mio script. Lavorato.. – Juan

0

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

-bash: ./my_script: /bin/bash^M: bad interpreter: No such file or directory

Il modo migliore per scoprire se si tratta di questo problema è semplice luogo in un enunciato echo l'intero file e verificare se è gettato lo stesso errore.

Problemi correlati