Điều đó không liên quan gì grep
- đó là vì đường ống |
chuyển hướng luồng đầu ra tiêu chuẩn stdout
trong khi các Permission denied
thông báo nằm trong luồng lỗi tiêu chuẩn stderr
. Bạn có thể đạt được kết quả bạn muốn bằng cách kết hợp các luồng bằng cách sử dụng 2>&1
(chuyển hướng luồng có bộ mô tả tệp 2
đến luồng có bộ mô tả tệp 1
) để stderr
cũng như stdout
được dẫn đến đầu vào của lệnh grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
nhưng sẽ bình thường hơn nếu chỉ loại bỏ stderr
hoàn toàn bằng cách chuyển hướng nó đến/dev/null
find / -name libGL.so.1 2>/dev/null
Sử dụng | & thay vì 2> & 1 |
Nếu bạn xem trang người đàn ông Bash, bạn sẽ có thể nhận thấy điều này:
Nếu |&
được sử dụng, lỗi tiêu chuẩn của lệnh được kết nối với đầu vào tiêu chuẩn của lệnh2 thông qua đường ống; nó là tốc ký cho 2>&1 |
.
Vì vậy, bạn cũng có thể sử dụng cấu trúc này nếu bạn muốn tham gia STDERR và STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1
, kết hợpstdout
vàstderr
sau đó lọc sẽ ẩn kết quả