2009-11-19 31 views

Trả lời

273

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

+24

Đ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

+0

Bạn có thể thử sử dụng 'which [program]' để xem hệ 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. – cr125rider

+7

@ cr125rider, 'which' không đặc biệt chính xác - nó không biết về bí danh, hàm shell, ghi nhớ tra cứu PATH hoặc các yếu tố khác bên trong trạng thái shell. Tốt hơn nhiều khi sử dụng 'type', một nội trang hệ vỏ mà biết về tất cả những thứ đó. –

6

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

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

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

6

Quy ước vỏ là thực thi thành công nên thoát với giá trị 0. Mọi thứ khác có thể được hiểu là lỗi của một số loại, trên một phần của bash hoặc tệp thực thi bạn vừa chạy. Xem thêm $ PIPESTATUSEXIT TÌNH TRẠNG phần của trang bash người đàn ông:

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. 
3

127 - command not found

dụ: $ caat Các thông báo lỗi sẽ

bash:

caat: command not found

bây giờ bạn kiểm tra sử dụng echo $?

+0

ví dụ rất hay! – Victor

30

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

127 - command not found

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

1

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

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

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

Lỗi này đôi khi cũng bị 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ự là hiện tại. Có thể là do các ký tự đặc biệt không đọc được không hợp lệ có trong các tệp có thể do trình chỉnh sửa 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: bad interpreter: No such file or directory

Cách tốt nhất để tìm hiểu xem đó là vấn đề này là nơi đơn giản một echo tuyên bố trong toàn bộ tập tin và xác minh nếu lỗi tương tự được ném.