Qual è il significato del valore di ritorno 127 da $? in UNIX.
Qual è il significato del valore di ritorno 127 da $? in UNIX.
Risposte:
Il valore 127 viene restituito /bin/sh
quando il comando dato non viene trovato nella PATH
variabile 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.
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.
which
non è 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.
126
( Permission denied
), non 127
quando 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
).
127 - command not found
esempio: $ caat Il messaggio di errore lo farà
bash:
caat: comando non trovato
ora controlli usando echo $?
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.
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.
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.
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');
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.