Яке значення повернення значення 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 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.
Він не має особливого значення, крім того, що останній процес виходу зробив це зі статусом виходу 127.
Однак він також використовується bash (припускаючи, що ви використовуєте bash як оболонку), щоб сказати вам, що команда, яку ви намагалися виконати, не може бути виконана (тобто її неможливо знайти). Це, на жаль, не відразу виводиться, якщо процес закінчився зі статусом 127, або якщо його не вдалося знайти.
EDIT:
Не відразу виводиться, за винятком виводу на консолі, але це стек переповнення, тому я припускаю, що ви робите це в сценарії.
Ця помилка також часом обманює. Він говорить про те, що файл не знайдено, хоча файли справді є. Це може бути через недійсні нечитабельні спеціальні символи, присутні у файлах, які можуть бути викликані редактором, який ви використовуєте. Це посилання може допомогти вам у таких випадках.
-bash: ./my_script: / bin / bash ^ M: неправильний перекладач: Немає такого файлу чи каталогу
Найкращий спосіб з’ясувати, чи це проблема, - просто розмістити ехо-заяву у всьому файлі та перевірити, чи є однакова помилка.
Якщо ви намагаєтеся запустити програму, використовуючи мову скриптів, можливо, вам доведеться включити повний шлях мови сценаріїв і файл для виконання. Наприклад:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Якщо в JCL мейнфрейму IBM є кілька зайвих символів або цифр в кінці виклику імені unix-скрипта, він може викликати таку помилку.