To nie ma nic wspólnego grep
- to dlatego, że potok |
przekierowuje standardowy strumień wyjściowy, stdout
podczas gdy Permission denied
komunikaty znajdują się w standardowym strumieniu błędów stderr
. Możesz osiągnąć pożądany wynik, łącząc strumienie za pomocą 2>&1
(przekieruj strumień, którego deskryptorem pliku jest 2
strumień, którego deskryptorem jest plik 1
), aby można było stderr
również stdout
przesłać strumieniowo do wejścia polecenia grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
ale bardziej zwyczajnie byłoby po prostu stderr
całkowicie odrzucić , przekierowując go na/dev/null
find / -name libGL.so.1 2>/dev/null
Używanie | & zamiast 2> i 1 |
Jeśli spojrzysz na stronę podręcznika użytkownika Bash, prawdopodobnie zauważysz ten błąd:
Jeśli |&
jest używany, standardowy błąd polecenia jest połączony ze standardowym wejściem polecenia 2 przez potok; jest skrótem od 2>&1 |
.
Możesz więc także użyć tego konstruktu, jeśli chcesz dołączyć do STDERR i STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1
, połączenie,stdout
astderr
następnie filtrowanie ukryłoby wynikTwoje polecenie powinno brzmieć:
Find narzeka na uprawnienia do standardowego błędu (fd2). Aby wyeliminować te linie, przekieruj (>) standard do segmentu bitów (/ dev / null).
źródło
Linie „odmowa uprawnień” idą do strumienia stderr (błąd standardowy), ale przepuszczasz stdout (wyjście standardowe) przez grep.
Możesz całkowicie przekierować stderr za pomocą
źródło
Czy próbowałeś wywołać polecenie za pomocą sudo ?
Jeśli nadal wyświetla komunikat, użyj wspomnianego już przekierowania stderr (fd = 2) do nirwany (/ dev / null) :
Więcej pomysłów tutaj , powodzenia!
źródło