Что означает возвращаемое значение 127 из $? в UNIX.
Что означает возвращаемое значение 127 из $? в UNIX.
Ответы:
Значение 127 возвращается, /bin/sh
когда данная команда не найдена в вашей PATH
системной переменной и не является встроенной командой оболочки. Другими словами, система не понимает вашу команду, потому что она не знает, где найти двоичный файл, который вы пытаетесь вызвать.
which [program]
чтобы увидеть, какой двоичный файл использует ОС. Если он пуст, следующим шагом будет проверка бита выполнения и PATH.
which
не совсем точен - он не знает ни о псевдонимах, ни о функциях оболочки, ни о памятке поиска в PATH, ни о других факторах, связанных с состоянием оболочки. Гораздо лучше использовать type
встроенную оболочку, которая знает обо всех этих вещах.
126
( Permission denied
), а не 127
когда я пытаюсь вызвать неисполняемый файл (независимо от его содержимого); аналогично, попытка выполнить каталог также приводит к 126
( is a directory
).
127 - command not found
пример: $ caat Сообщение об ошибке будет
Баш:
caat: команда не найдена
теперь вы проверяете, используя echo $?
Соглашение оболочки гласит, что успешный исполняемый файл должен завершаться со значением 0. Все остальное может быть интерпретировано как какой-то сбой, на части bash или исполняемого файла, который вы только что запустили. Смотрите также $ PIPESTATUS и раздел EXIT STATUS на странице руководства 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.
Это не имеет особого значения, кроме того, что последний процесс, который завершил работу, сделал это со статусом выхода 127.
Тем не менее, он также используется bash (при условии, что вы используете bash в качестве оболочки), чтобы сообщить вам, что команда, которую вы пытались выполнить, не может быть выполнена (т.е. она не может быть найдена). К сожалению, это не выводится сразу, если процесс завершился со статусом 127 или не может быть найден.
РЕДАКТИРОВАТЬ:
не выводится сразу, за исключением вывода на консоль, но это переполнение стека, поэтому я предполагаю, что вы делаете это в сценарии.
Эта ошибка также временами обманчива. Он говорит, что файл не найден, хотя файлы действительно присутствуют. Это может быть из-за недопустимых нечитаемых специальных символов, присутствующих в файлах, которые могут быть вызваны используемым вами редактором. Эта ссылка может помочь вам в таких случаях.
-bash: ./my_script: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога
Лучший способ выяснить, не является ли это проблемой, состоит в простом размещении оператора echo во всем файле и проверке, если выдается такая же ошибка.
Если вы пытаетесь запустить программу с использованием языка сценариев, вам может потребоваться указать полный путь к языку сценариев и файл для выполнения. Например:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Если в конце имени вызываемого сценария Unix в JCL мэйнфрейма IBM есть несколько дополнительных символов или цифр, он может выдать такую ошибку.