127 Код возврата от $?


Ответы:


428

Значение 127 возвращается, /bin/shкогда данная команда не найдена в вашей PATHсистемной переменной и не является встроенной командой оболочки. Другими словами, система не понимает вашу команду, потому что она не знает, где найти двоичный файл, который вы пытаетесь вызвать.


55
Это также происходит, если bash-скрипт не имеет режима «+ x», но действительно существует.
MatthewKremer

3
Вы можете попробовать использовать, which [program]чтобы увидеть, какой двоичный файл использует ОС. Если он пуст, следующим шагом будет проверка бита выполнения и PATH.
4:43

10
@ cr125rider, whichне совсем точен - он не знает ни о псевдонимах, ни о функциях оболочки, ни о памятке поиска в PATH, ни о других факторах, связанных с состоянием оболочки. Гораздо лучше использовать typeвстроенную оболочку, которая знает обо всех этих вещах.
Чарльз Даффи

5
Это также случилось со мной с файлом, который имел перевод строки Windows. Исправление
концов

4
@MatthewKremer: На самом деле, я получаю 126( Permission denied), а не 127когда я пытаюсь вызвать неисполняемый файл (независимо от его содержимого); аналогично, попытка выполнить каталог также приводит к 126( is a directory).
mklement0

58

Обычно это означает:

127 - команда не найдена

но это также может означать, что команда найдена ,
но библиотека, которая требуется для этой команды , НЕ найдена .


14

127 - command not found

пример: $ caat Сообщение об ошибке будет

Баш:

caat: команда не найдена

теперь вы проверяете, используя echo $?


10

Соглашение оболочки гласит, что успешный исполняемый файл должен завершаться со значением 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.

8

Это не имеет особого значения, кроме того, что последний процесс, который завершил работу, сделал это со статусом выхода 127.

Тем не менее, он также используется bash (при условии, что вы используете bash в качестве оболочки), чтобы сообщить вам, что команда, которую вы пытались выполнить, не может быть выполнена (т.е. она не может быть найдена). К сожалению, это не выводится сразу, если процесс завершился со статусом 127 или не может быть найден.

РЕДАКТИРОВАТЬ:
не выводится сразу, за исключением вывода на консоль, но это переполнение стека, поэтому я предполагаю, что вы делаете это в сценарии.


2

Эта ошибка также временами обманчива. Он говорит, что файл не найден, хотя файлы действительно присутствуют. Это может быть из-за недопустимых нечитаемых специальных символов, присутствующих в файлах, которые могут быть вызваны используемым вами редактором. Эта ссылка может помочь вам в таких случаях.

-bash: ./my_script: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога

Лучший способ выяснить, не является ли это проблемой, состоит в простом размещении оператора echo во всем файле и проверке, если выдается такая же ошибка.


1

Если вы пытаетесь запустить программу с использованием языка сценариев, вам может потребоваться указать полный путь к языку сценариев и файл для выполнения. Например:

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

Спасибо, это сработало для меня. Так что я сделал, что GS и затем использовал путь вывода в моем сценарии. Работал ..
Хуан

0

Если в конце имени вызываемого сценария Unix в JCL мэйнфрейма IBM есть несколько дополнительных символов или цифр, он может выдать такую ​​ошибку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.