2> / dev / null có nghĩa là gì?


Câu trả lời:


347

Toán tử> chuyển hướng đầu ra thường thành một tệp nhưng nó có thể là một thiết bị. Bạn cũng có thể sử dụng >> để chắp thêm.

Nếu bạn không chỉ định một số thì luồng đầu ra tiêu chuẩn được giả sử nhưng bạn cũng có thể chuyển hướng lỗi

> filechuyển hướng stdout để tập tin
1> filechuyển hướng stdout để tập tin
2> filechuyển hướng stderr để tập tin
&> filechuyển hướng stdout và stderr để tập tin

/dev/nulllà thiết bị null, nó lấy bất kỳ đầu vào nào bạn muốn và ném nó đi. Nó có thể được sử dụng để ngăn chặn bất kỳ đầu ra.


6
có sự khác biệt giữa > /dev/null 2>&1&> /dev/null
Alexander Mills

13
Trong thực tế ngày nay tôi không nghĩ có 2>&1một cú pháp cũ hơn nên &>sẽ không hoạt động nhiều năm trước nhưng cả hai đều tương đương nhau.
Warren Hill

28

Nói tóm lại, nó chuyển hướng stderr(fd 2) đến lỗ đen (loại bỏ đầu ra của lệnh).

Một số trường hợp sử dụng phổ biến hơn để chuyển hướng:

command > /dev/null 2>&1 &

Chạy commandtrong nền, loại bỏ stdoutstderr

command >> /path/to/log 2>&1 &

Chạy commandvà nối stdout và stderr vào một tệp nhật ký.

Trong Bash 4+, một dạng ngắn hơn (nhưng ít đọc hơn) là chức năng

command &>> /path/to/log

3
Có một lý do tốt để sử dụng > /dev/null 2>&1thay vì &> /dev/null?
Craig McQueen

7
@CraigMcQueen &>là mới trong Bash 4, trước đây chỉ là cách truyền thống, tôi chỉ quen với nó (dễ nhớ).
Terry Wang

@CraigMcQueen theo nhận xét về câu trả lời này , &> /dev/nullcó thể không hoạt động trong một số shell nhưng> / dev / null 2> & 1 sẽ hoạt động trong tất cả các shell tương thích POSIX.
Stack Underflow

3
Tại sao lại là 2> & 1 mà không phải 2 & 1> ??
marienbad

1
@marienbad thực sự là một câu hỏi đáng để đăng :-) Cú pháp là fn>target, fnsố tệp ở đâu (thông thường là 0-2, một số chương trình xác định nhiều số hơn) và targetthường là tên tệp nhưng ở đây là tên tệp khác - có tiền tố &là cú pháp cho "Tôi muốn một tên tệp thay vì tên tệp".
toolforger

9

/dev/nullđược coi là lỗ đen trong Linux / Unix, vì vậy bạn có thể đặt bất cứ thứ gì vào đây nhưng bạn sẽ không thể lấy lại từ đó /dev/null.

Hơn nữa, 2>có nghĩa là bạn đang chuyển hướng (tức là >) stderr (tức là 2) vào lỗ đen (tức là /dev/null)

Lệnh của bạn là:

grep -i 'abc' content 2>/dev/null 

Đừng cố kết thúc bằng một dấu gạch chéo phía trước như thế này - 2>/dev/null/(nó không phải là một thư mục).


2

Nội dung grep -i 'abc' sẽ tạo đầu ra được hiển thị trên bảng điều khiển của bạn, bao gồm mọi lỗi.

Việc chỉ định 2>/dev/nullsẽ lọc ra các lỗi để chúng không xuất ra bảng điều khiển của bạn.

Chi tiết hơn: 2 đại diện cho bộ mô tả lỗi, đó là nơi ghi lỗi. Theo mặc định, chúng được in ra trên bàn điều khiển.

\> chuyển hướng đầu ra đến nơi được chỉ định, trong trường hợp này /dev/null

/dev/null là thiết bị Linux tiêu chuẩn nơi bạn gửi đầu ra mà bạn muốn bỏ qua.


Súc tích và về chủ đề Câu trả lời tốt.
Sergiy Kolodyazhnyy
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.