Có thể có hoặc không có mã lỗi khác nhau tùy thuộc vào phiên bản khác biệt bạn sử dụng. Nếu tôi nhớ chính xác, khác biệt BSD chuẩn luôn trả về mã thoát là 0, 1 hoặc 2.
Tuy nhiên, manpage không lập bản đồ ra mọi thứ khác biệt, nhưng tài liệu bạn có thể sử dụng để sử dụng chỉ huy. Trong một kịch bản lệnh shell, tôi muốn biết nếu các tập tin phù hợp (exit = 0) hoặc không khớp (exit = 1). Tuy nhiên, trong kịch bản lệnh shell của tôi, tôi cũng muốn biết rằng lệnh diff không hoạt động.
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
Hãy tưởng tượng nếu tôi được cho biết rằng 2 có nghĩa là diff lệnh thất bại, nhưng một phiên bản mới hơn của lệnh diff làm một sự phân biệt giữa một tập tin mà bạn không thể đọc được (exit = 2) và một tập tin mất tích (exit = 3). Bây giờ, hãy tưởng tượng nếu tôi đã làm như sau trong một phiên bản trước của lệnh diff, nhưng $file2
không tồn tại:
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
Trong đoạn mã trên, tôi đã kiểm tra cho mã lỗi của 2 và 1, nhưng không phải 3 Vì vậy, thay vì phát hiện một tập tin bị thiếu, tôi giả định rằng các tập tin phù hợp.
Trang manpage đang cố gắng đảm bảo rằng các bản nâng cấp trong tương lai cho hệ điều hành không làm cho hầu hết các kịch bản shell của bạn đột nhiên thất bại. Đó là lý do tại sao có một lệnh riêng biệt awk
và nawk
và một lệnh riêng biệt grep
và egrep
.
* Được cập nhật theo nhận xét của @chus.
Nguồn
2011-08-15 16:47:18
đồng ý, tôi đã kiểm tra các nguồn khác nhau, và các mã lối thoát duy nhất là EXIT_SUCCESS, EXIT_FAILURE (cả quy định tại stdlib.h) và EXIT_TROUBLE , được định nghĩa trong src/diffutils-3.0/system.h –
Tùy chọn '--text' tạo ra một mớ hỗn độn của STDOUT của tôi nếu có hai tệp nhị phân khác nhau (lớn). –
Tôi đang sử dụng diffutils GNU quá nhưng trích dẫn các trang người đàn ông sai. –