Це нічого спільного grep- це тому, що труба |перенаправляє стандартний вихідний потік, stdoutтоді як Permission deniedповідомлення перебувають у стандартному потоці помилок stderr. Ви можете досягти бажаного результату, комбінуючи потоки, використовуючи 2>&1(перенаправляйте потік, дескриптор якого файлу призначений 2на потік, дескриптор якого файлу 1), щоб він stderrтакож stdoutпотрапляв на вхід команди grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
але було б звичніше просто відмовитися stderrвзагалі, перенаправляючи його на/dev/null
find / -name libGL.so.1 2>/dev/null
Використання | & замість 2> & 1 |
Якщо ви подивитеся на сторінку чоловіка Баша, ви, ймовірно, помітите це розмиття:
Якщо |&використовується, стандартна помилка команди підключається до стандартного вводу command2 через трубу; це скорочення 2>&1 |.
Таким чином, ви також можете використовувати цю конструкцію, якщо ви хочете приєднатись до STDERR та STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1, комбінуючиstdoutіstderrпотім фільтрування б приховати результат