127 Код возврата от $? - PullRequest
246 голосов
/ 19 ноября 2009

Что означает возвращаемое значение 127 из $? в UNIX.

Ответы [ 8 ]

366 голосов
/ 19 ноября 2009

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

48 голосов
/ 24 июля 2013

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

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

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

10 голосов
/ 15 октября 2012

127 - command not found

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

Баш:

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

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

9 голосов
/ 19 ноября 2009

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

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

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

EDIT:
Не выводится сразу, за исключением вывода на консоль, но это переполнение стека, поэтому я предполагаю, что вы делаете это в скрипте.

1 голос
/ 13 февраля 2017

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

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
0 голосов
/ 11 июня 2019

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

0 голосов
/ 14 сентября 2017

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...