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

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

10 ответов

Решение

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

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

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

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

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 или не может быть найден.

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

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

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

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

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

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

  1. перейдите в C:\Program Files\Git\etc
  2. открыть gitconfig блокнотом
  3. изменить [core]autocrlf = true на [core]autocrlf = false

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

Например, если вы запускаете сценарий оболочки с символами конца строки CRLF в системе на базе UNIX и в /bin/shshell, можно столкнуться с некоторыми ошибками, такими как следующие, которые я получил после запуска моего скрипта с именем my_test.sh:

      $ ./my_test.sh
sh: 2: ./my_test.sh: not found
$ echo $?
127

В качестве примечания, используя , я получил код выхода, который соответствует документации gnu.org о bash:

Если команда не найдена, дочерний процесс, созданный для ее выполнения, возвращает статус 127. Если команда найдена, но не является исполняемой, возвращается статус 126.

Наконец, вот результат запуска моего скрипта в /bin/bash:

      arman@Debian-1100:~$ ./my_test.sh
-bash: ./my_test.sh: /bin/bash^M: bad interpreter: No such file or directory
arman@Debian-1100:~$ echo $?
126

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

Другие вопросы по тегам