127 Повернення коду від $?


Відповіді:


428

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


55
Це також відбувається, якщо сценарій bash не має режиму "+ x", але він дійсно існує.
MatthewKremer

3
Ви можете спробувати використати, which [program]щоб побачити, який бінарний ОС використовується. Якщо він з’являється порожнім, наступним кроком є ​​перевірка біта виконання та PATH.
чотири43

10
@ cr125rider, whichне особливо точний - він не знає про псевдоніми, функції оболонки, запам'ятовування пошуку PATH або інші фактори, що є внутрішніми для оболонки. Набагато краще використовувати typeоболонку, яка знає про всі ці речі.
Чарльз Даффі

5
Це трапилось і зі мною файлом, який містив канали рядків Windows. Виправлення закінчень рядків у форматі unix вирішило проблему
Міткінс

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 man:

   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, або якщо його не вдалося знайти.

EDIT:
Не відразу виводиться, за винятком виводу на консолі, але це стек переповнення, тому я припускаю, що ви робите це в сценарії.


2

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

-bash: ./my_script: / bin / bash ^ M: неправильний перекладач: Немає такого файлу чи каталогу

Найкращий спосіб з’ясувати, чи це проблема, - просто розмістити ехо-заяву у всьому файлі та перевірити, чи є однакова помилка.


1

Якщо ви намагаєтеся запустити програму, використовуючи мову скриптів, можливо, вам доведеться включити повний шлях мови сценаріїв і файл для виконання. Наприклад:

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

Дякую, це працювало для мене. Тож я зробив, який gs, а потім використав вихідний шлях у своєму сценарії. Працював ..
Хуан

0

Якщо в JCL мейнфрейму IBM є кілька зайвих символів або цифр в кінці виклику імені unix-скрипта, він може викликати таку помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.