127 Trả về mã từ $?


Câu trả lời:


428

Giá trị 127 được trả về /bin/shkhi không tìm thấy lệnh đã cho trong PATHbiến hệ thống của bạn và nó không phải là lệnh shell tích hợp. Nói cách khác, hệ thống không hiểu lệnh của bạn, vì nó không biết tìm nhị phân bạn đang cố gắng gọi ở đâu.


55
Điều này cũng xảy ra nếu tập lệnh bash không có chế độ "+ x" nhưng thực sự tồn tại.
MatthewKremer

3
Bạn có thể thử sử dụng which [program]để xem hệ điều hành nhị phân nào đang sử dụng. Nếu nó xuất hiện trống, bước tiếp theo là kiểm tra bit thực thi và PATH.
bốn43

10
@ cr125rider, whichkhông đặc biệt chính xác - nó không biết về bí danh, chức năng hệ vỏ, ghi nhớ tra cứu PATH hoặc các yếu tố khác bên trong trạng thái vỏ. Tốt hơn nhiều để sử dụng type, một vỏ dựng sẵn biết về tất cả những điều đó.
Charles Duffy

5
Điều này cũng xảy ra với tôi với một tệp có nguồn cấp dữ liệu Windows. Sửa lỗi kết thúc dòng thành định dạng unix đã giải quyết vấn đề
Mitkins

4
@MatthewKremer: Trên thực tế, tôi nhận được 126( Permission denied), không phải 127khi tôi cố gắng gọi một tệp không thể thực thi (không phân biệt nội dung của nó); tương tự, một nỗ lực để thực thi một thư mục cũng dẫn đến 126( is a directory).
mkuity0

58

Nói chung nó có nghĩa là:

127 - lệnh không tìm thấy

nhưng nó cũng có thể có nghĩa là lệnh được tìm thấy ,
nhưng thư viện được yêu cầu bởi lệnh KHÔNG được tìm thấy .


14

127 - command not found

ví dụ: $ caat Thông báo lỗi sẽ

bash

caat: lệnh không tìm thấy

bây giờ bạn kiểm tra bằng echo $?


10

Một quy ước shell là một tệp thực thi thành công sẽ thoát với giá trị 0. Mọi thứ khác có thể được hiểu là một lỗi nào đó, trên một phần của bash hoặc tệp thực thi mà bạn vừa chạy. Xem thêm $ PIPESTATUS và phần TÌNH TRẠNG EXIT của trang 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

Nó không có ý nghĩa đặc biệt, ngoài quy trình cuối cùng để thoát đã làm như vậy với trạng thái thoát là 127.

Tuy nhiên, nó cũng được sử dụng bởi bash (giả sử bạn đang sử dụng bash làm shell) để cho bạn biết rằng lệnh bạn đã cố thực hiện không thể được thực thi (nghĩa là không thể tìm thấy). Thật không may, ngay lập tức không được khấu trừ, nếu quá trình thoát khỏi trạng thái 127 hoặc nếu không thể tìm thấy.

EDIT:
Không thể khấu trừ ngay lập tức, ngoại trừ đầu ra trên bàn điều khiển, nhưng đây là lỗi tràn ngăn xếp, vì vậy tôi cho rằng bạn đang làm điều này trong một tập lệnh.


2

Lỗi này cũng có lúc lừa dối. Nó nói rằng tập tin không được tìm thấy mặc dù các tập tin thực sự có mặt. Có thể là do các ký tự đặc biệt không thể đọc được không hợp lệ có trong các tệp có thể do trình soạn thảo bạn đang sử dụng gây ra. Liên kết này có thể giúp bạn trong những trường hợp như vậy.

-bash: ./my_script: / bin / bash ^ M: trình thông dịch xấu: Không có tệp hoặc thư mục như vậy

Cách tốt nhất để tìm hiểu xem có phải vấn đề này hay không là đơn giản đặt một câu lệnh echo trong toàn bộ tệp và xác minh xem có lỗi tương tự không.


1

Nếu bạn đang cố chạy một chương trình bằng ngôn ngữ kịch bản, bạn có thể cần bao gồm toàn bộ đường dẫn của ngôn ngữ kịch bản lệnh tệp để thực thi. Ví dụ:

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

Cảm ơn, điều này đã làm việc cho tôi. Vì vậy, tôi đã làm gs và sau đó sử dụng đường dẫn đầu ra trong kịch bản của tôi. Đã làm việc ..
Juan

0

Nếu máy tính lớn JCL của IBM có một số ký tự hoặc số phụ ở cuối tên của tập lệnh unix được gọi thì nó có thể gây ra lỗi như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.