Câu trả lời:
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
> file
chuyển hướng stdout để tập tin
1> file
chuyển hướng stdout để tập tin
2> file
chuyển hướng stderr để tập tin
&> file
chuyển hướng stdout và stderr để tập tin
/dev/null
là 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.
2>&1
mộ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.
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 command
trong nền, loại bỏ stdout
vàstderr
command >> /path/to/log 2>&1 &
Chạy command
và 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
> /dev/null 2>&1
thay vì &> /dev/null
?
&>
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ớ).
&> /dev/null
có 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.
fn>target
, fn
số 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à target
thườ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".
/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).
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/null
sẽ 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.
> /dev/null 2>&1
và&> /dev/null