Bất kỳ ai cũng có thể cho tôi biết mã trả về có thể có cho lệnh rm -rf khác 0, tức là mã trả về có thể cho các trường hợp thất bại. Tôi muốn biết lý do chi tiết hơn cho sự thất bại của lệnh không giống như lệnh bị lỗi (trả về 0).
Bất kỳ ai cũng có thể cho tôi biết mã trả về có thể có cho lệnh rm -rf khác 0, tức là mã trả về có thể cho các trường hợp thất bại. Tôi muốn biết lý do chi tiết hơn cho sự thất bại của lệnh không giống như lệnh bị lỗi (trả về 0).
Câu trả lời:
Để xem mã trả về, bạn có thể sử dụng echo $?
trong bash.
Để xem ý nghĩa thực tế, một số nền tảng (như Debian Linux) có perror
sẵn tệp nhị phân, có thể được sử dụng như sau:
$ rm -rf something/; perror $?
rm: cannot remove `something/': Permission denied
OS error code 1: Operation not permitted
rm -rf
tự động loại bỏ hầu hết các lỗi. Lỗi rất có thể bạn sẽ thấy là 1
(Thao tác không được phép), lỗi này sẽ xảy ra nếu bạn không có quyền xóa tệp. -f
cố ý loại bỏ hầu hết các lỗi
perror
. Trên hệ thống của tôi, nó xuất xưởng với mysql.
strace
cho bạn biết nếu một cuộc gọi hệ thống thất bại, nhưng trừ khi bạn nhìn vào nguồn, bạn không biết tòa nhà liên quan đến trạng thái thoát chương trình như thế nào (ví dụ: nếu bạn chạy vào -f
, ENOENT
bị chặn). Do đó không liên quan ở đây
lấy coreutils từ git ....
nhìn vào lối ra chúng ta thấy ...
openfly@linux-host:~/coreutils/src $ cat rm.c | grep -i exit
if (status != EXIT_SUCCESS)
exit (status);
/* Since this program exits immediately after calling 'rm', rm need not
atexit (close_stdin);
usage (EXIT_FAILURE);
exit (EXIT_SUCCESS);
usage (EXIT_FAILURE);
error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
exit (EXIT_SUCCESS);
exit (status == RM_ERROR ? EXIT_FAILURE : EXIT_SUCCESS);
Bây giờ nhìn vào biến trạng thái ....
openfly@linux-host:~/coreutils/src $ cat rm.c | grep -i status
usage (int status)
if (status != EXIT_SUCCESS)
exit (status);
enum RM_status status = rm (file, &x);
assert (VALID_STATUS (status));
exit (status == RM_ERROR ? EXIT_FAILURE : EXIT_SUCCESS);
có vẻ như không có nhiều xảy ra ở đó với trạng thái thoát.
Tôi thấy EXIT_FAILURE và EXIT_SUCCESS chứ không phải bất cứ điều gì khác.
về cơ bản là 0 và 1 / -1
Để xem các tòa nhà thoát hiểm () cụ thể và cách chúng xảy ra trong một luồng quy trình, hãy thử điều này
openfly@linux-host:~/ $ strace rm -rf $whatever
khá đơn giản.
tham chiếu:
0 / >0
.
I want to know more detailed reason for the failure of the command unlike just the command is failed(return other than 0)
nên số phiếu giảm là điều dễ hiểu.
if (!(flags & FILEUTILS_FORCE)) {
thêm else{printf("same error message as perror");}
tôi chắc chắn các triển khai khác sẽ tương tự, nhưng nếu không phải là phiên bản busybox có thể được xây dựng riêng và bao gồm.
man ls
trên Ubuntu, nó giải thích lý do cho trạng thái thoát khác