Ý nghĩa của giá trị trả về 127 từ $ là gì? trong UNIX.
Ý nghĩa của giá trị trả về 127 từ $ là gì? trong UNIX.
Câu trả lời:
Giá trị 127 được trả về /bin/sh
khi không tìm thấy lệnh đã cho trong PATH
biế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.
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.
which
khô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 đó.
126
( Permission denied
), không phải 127
khi 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
).
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 $?
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.
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.
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.
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 và tệp để thực thi. Ví dụ:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
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.