Hãy chia >> /dev/null 2>&1
câu lệnh thành nhiều phần:
Phần 1: >>
chuyển hướng đầu ra
Điều này được sử dụng để chuyển hướng đầu ra chương trình và nối đầu ra ở cuối tập tin. Hơn...
Phần 2: /dev/null
tập tin đặc biệt
Đây là một tập tin đặc biệt giả thiết bị .
Lệnh ls -l /dev/null
sẽ cung cấp cho bạn chi tiết về tập tin này:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Bạn đã quan sát crw
? Điều đó có nghĩa là nó là một tệp thiết bị giả thuộc loại tệp ký tự đặc biệt cung cấp quyền truy cập nối tiếp.
/dev/null
chấp nhận và loại bỏ tất cả đầu vào; không tạo ra đầu ra (luôn trả về một dấu hiệu cuối tập tin khi đọc). Tham khảo: Wikipedia
Phần 3: 2>&1
mô tả tập tin
Bất cứ khi nào bạn thực hiện một chương trình, hệ điều hành luôn mở ba tệp, đầu vào tiêu chuẩn, đầu ra tiêu chuẩn và lỗi tiêu chuẩn như chúng ta biết mỗi khi mở tệp, hệ điều hành (từ kernel ) trả về một số nguyên không âm được gọi là mô tả tệp . Bộ mô tả tệp cho các tệp này lần lượt là 0, 1 và 2.
Vì vậy, 2>&1
chỉ cần nói lỗi chuyển hướng tiêu chuẩn đến đầu ra tiêu chuẩn.
&
có nghĩa là bất cứ điều gì sau đây là một mô tả tập tin, không phải là một tên tệp.
Nói tóm lại, bằng cách sử dụng lệnh này, bạn đang nói với chương trình của bạn không được hét trong khi thực hiện.
Tầm quan trọng của việc sử dụng là gì 2>&1
gì?
Nếu bạn không muốn tạo ra bất kỳ đầu ra nào, ngay cả trong trường hợp có một số lỗi được tạo ra trong thiết bị đầu cuối. Để giải thích rõ hơn, hãy xem xét ví dụ sau:
$ ls -l > /dev/null
Đối với lệnh trên, không có đầu ra nào được in trong thiết bị đầu cuối, nhưng nếu lệnh này tạo ra lỗi:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Mặc dù tôi đang chuyển hướng đầu ra /dev/null
, nó được in trong thiết bị đầu cuối. Đó là bởi vì chúng tôi không chuyển hướng đầu ra lỗi sang /dev/null
, do đó, để chuyển hướng đầu ra lỗi, nó được yêu cầu thêm 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.