Làm thế nào để tiếng câm tiếng ls lệnh ls?


9

Giả sử tôi làm một đệ quy ls

$ ls -R 

trên thư mục gốc.

Tôi nhận được rất nhiều tin nhắn như thế này -

ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...

Có cách nào để tránh hiển thị các cannot open directorythông báo " " ở trên không?

Câu trả lời:


24

Vì đây là các thông báo lỗi, chúng được gửi đến thiết bị xuất chuẩn không xuất chuẩn. Giải pháp là bạn chuyển hướng stderr:

ls -R 2>/dev/null

Giải trình:

Bất kỳ lệnh nào cũng có 3 mô tả tệp tiêu chuẩn: đầu vào tiêu chuẩn (0) (thường là thiết bị đầu cuối nơi bạn nhập lệnh), đầu ra tiêu chuẩn (1) (thường là thiết bị đầu cuối nơi lệnh in ra đầu ra) lỗi tiêu chuẩn (2) (theo mặc định đó là giống như đầu ra tiêu chuẩn).

Hầu hết (nếu không phải tất cả) các chương trình / công cụ đều in các cảnh báo và lỗi cho bộ mô tả tệp lỗi tiêu chuẩn. Bây giờ các mô tả tập tin sẽ không được sử dụng nhiều nếu chúng đã được sửa chữa; đó là lý do tại sao trình bao cung cấp chuyển hướng : bạn có thể chuyển hướng bất kỳ mô tả tệp tiêu chuẩn nào sang bất kỳ tệp nào bạn muốn.

Chuyển hướng stdin (để lấy đầu vào từ một tệp thay vì từ bàn phím của bạn):

interactive_program 0< file_with_answers

Như bạn có thể thấy, điều này có thể giúp bạn tự động hóa việc chạy các chương trình đơn giản, đặt ra nhiều câu hỏi bằng cách cung cấp cái gọi là "tệp trả lời" được cung cấp trên đầu vào tiêu chuẩn.

Điều này có thể được rút ngắn để

 interactive_program < file_with_answers

<làm cho chuyển hướng rõ ràng ( từ tệp đến chương trình)

Tương tự, thiết bị xuất chuẩn có thể được chuyển hướng qua 1>...hoặc >...hoặc >>...(nối vào tệp hiện có thay vì cắt bớt nó)

Chuyển hướng lỗi tiêu chuẩn yêu cầu bạn chỉ định bộ mô tả tệp một cách rõ ràng như vậy : 2>..., vì vậy, những gì ở trên là hướng tất cả các lỗi đến tệp đặc biệt /dev/nulllà một lỗ đen cho các bit.

Đọc liên quan về chuyển hướng như được cung cấp bởi MattDMo trong các ý kiến ​​dưới đây.


2> là gì? Bạn có thể vui lòng giải thích?
CodeBlue

3
Đó là một lệnh chuyển hướng. >sẽ chuyển hướng stdouthoặc đầu ra tiêu chuẩn, 2>chuyển hướng stderrhoặc lỗi tiêu chuẩn. 1>là giống như >, vì vậy bạn có thể thấy 2nguồn gốc từ đâu. Bạn có thể đọc thêm về chuyển hướng I / O tại đây trên Dự án Tài liệu Linux.
MattDMo

@CodeBlue Xem câu trả lời cập nhật của tôi.
Joseph R.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.