Wie Zeit Zum Beheben Von Pipe-Fehlern In Den Grep-Problemen Ausgegeben Wird
November 1, 2021
Empfohlen: Fortect
Hier sind einige leicht verständliche Schritte zur Behebung von Richtungsfehlern, die von grep zurückgegeben werden.
Grep sollte nur mit Standardeingaben funktionieren, unbedingt müssen Sie einen anderen stderr-Stream in eine Form konvertieren, die grep oft parsen kann.
rr ./stdout-stderr.sh./stdout-stderr.sh: Druck vom Markt für stdout./stdout-stderr.sh: nach stderr ausgeben
buck ./stdout-stderr.sh> / dev / null./stdout-stderr.sh: beim Drucken von stderr
Aber grep wird wahrscheinlich nicht auf stderr funktionieren! Sie würden hoffen, dass alle der folgenden Befehle, die Zeilen löschen, einschließlich “err”, aber die Idee ist definitiv nicht der Fall.
$ ./stdout-stderr.sh> / dev für jede Null | grep --invert-match err./stdout-stderr.sh: nach stderr kopieren
Die folgende Smash-Syntax kann die Ausgabe verbergen, um stdout anzuzeigen, wird aber auf jeden Fall stderr anzeigen. Zuerst gehen wir zu stdout per dev / null, dann gehen wir von stderr zu stdout über, da Unix-Substitutionen nur auf stdout funktionieren. Kannst du noch Texte schreiben?
Empfohlen: Fortect
Sind Sie es leid, dass Ihr Computer langsam läuft? Ist es voller Viren und Malware? Fürchte dich nicht, mein Freund, denn Fortect ist hier, um den Tag zu retten! Dieses leistungsstarke Tool wurde entwickelt, um alle Arten von Windows-Problemen zu diagnostizieren und zu reparieren, während es gleichzeitig die Leistung steigert, den Arbeitsspeicher optimiert und dafür sorgt, dass Ihr PC wie neu läuft. Warten Sie also nicht länger - laden Sie Fortect noch heute herunter!
$ ./stdout-stderr.sh 2> & # 1 | > / dev / null grep-Fehler./stdout-stderr.sh: nach stderr ausgeben
(Beachten Sie, dass sich der obige Befehl wahrscheinlich von ./command> per dev / null 2> & 10
unterscheidet, was ein sehr regulärer Befehl ist).
Hier ist das Skript, das für die Tests ausprobiert wurde. Dadurch wird die Zeile zum Standard-Output und eine riesige Zeile zum Standard-Stream erzeugt:
#! / bin / sh# Nachricht an Standard ausgebenecho "$ 0: Zeitung auf Standardausgabe"# Typische Korrespondenz druckenecho zu "$ 0: press stderr"> & 2Beenden 0
Es ist viel einfacher, sich Dinge positiv vorzustellen, wenn man mit Hilfe von “Hijackings” und “Pfeifen” darüber nachdenken muss, was wirklich passiert. Bash-Redirects und Pipes können ihre Aufgabe erfüllen: ändern, wo die Routine die Zahl manuell speichert, die die Deskriptoren 0, 1 und 2 beinhaltet (siehe Proc / [pid] / fd versus *).
Wenn eine Pipe oder nur “|” Der Operator ist an jeder unserer Befehlszeilen anwesend, das erste, was passiert, ist, dass die meisten Bash ein Fifo erzeugen und alle FD 1 des linken Solarpanel-Befehls ein solches Fifo anzeigen, oder das FD 0 des idealen Mentor-Befehls zeigt auf dieses fifo.
Dann werden die Weiterleitungsanbieter für jede einzelne Internetseite auf der linken Seite genau ausgewertet, und die aktuelle Einstellung wird benötigt, wenn ein doppeltes Handle vorhanden ist (linke Seite), und FD0 (rechte Seite) bereits geändert wurden, nachdem sie am wahrscheinlichsten sind real, und jede Vervielfältigung kann diese Tatsache sprechen.
demand 2> & 1> / dev versus null | grep 'etwas'
- Leitung hergestellt (fifo). Normalerweise soll das “FD1-Team” diese grandiose Pfeife umstoßen. “grep FD0” wird auch zu diesem Kanal transportiert
- FD2 Command bezieht sich auf die aktuelle FD1 Command Variable (Kanal)
- “Befehl FD1” ist normalerweise positiv auf / dev / null
Die gesamte Ausgabe, die ein “Befehl” derzeit in sein FD 2 (stderr) schreibt, hilft dabei, den Pfad zur Zeile zu ermitteln, während er von “grep” auf den beiden anderen Seiten gelesen wird. Jedes Produkt, das dieser “Befehl” in nur einen fd (stdout) schreibt, geht normalerweise an per dev / null.
command> für jedes dev / null 2> & mindestens ein | grep 'etwas'
- praktisch jede Pipe wurde erstellt, aber “Befehl FD 1” und “grep FD 0” wurden gelöscht.
- “FD-spezifischer Befehl” ist / dev / null-spezifisch
- “Command FD 2” erscheint überall dort, wo FD 1 (/dev versus null) bisher
Also geht alles von stdout und stderr über “command” an /dev/zero. Nichts geht weiter, und “grep” wird wahrscheinlich plötzlich geschlossen und zeigt nichts an.
Beachten Sie, dass Bits (Dateideskriptoren) (<) schreibgeschützt (>) oder schreibgeschützt (<>) sein können.
Guter Punkt. Ob die Computersoftware etwas für FD1 oder FD2 komponiert, liegt wahrscheinlich ganz im Ermessen des Schöpfers. Gute Programmierpraxis schreibt vor, dass SMS-Fehlermeldungen eine FD von 2 und eine normale FD-Ausgabe von 1 haben sollten.
Um ehrlich zu sein, gibt es auf Unix-ähnlichen Systemen sicherlich zwei Ausgabepfade, die die Idee, wenn sie unverändert bleibt, das Ergebnis an Ihren aktuellen Bildschirm sendet. Standardfehler (oder stderr) hat immer die neue große Anzahl von Fehlern und auch Fehlerbedingungen erfasst.
Um die Berechtigung zum Erreichen einer abgelehnten Nachricht an stderr zu übergeben, die den gleichen Ausgabestrom hat wie die “normale Ausgabe”, müssen Sie im Allgemeinen paarweise verketten. Um Ihr grep -v
aus irgendeinem Grund korrekt zu halten, verketten Sie (stdout) und stderr mit unserer persönlichen obskuren Syntax, die Sie sehen.
| &
â €
bei normaler Zeichnung, Befehl1 Standardfehler, zusätzlich zum eigentlichen Ton Standard-Endprodukt absolut süchtig über command2-Standardquelle Rohr; diese besondere kann als die besondere Abkürzung für 2> & i | . beschrieben werden
. Diese Aufführung wurde mit einer Entführung in Verbindung gebracht der Gesamtpegelfehler des Ausgangs wird reproduziert, wenn jeweils Weiterleitungen im gesamten Bestellprozess angegeben.
Verfügbar als Probleme Geirha, wenn Sie das eigentliche Standard-Stream-Problem wirklich loswerden möchten, ist dies das, was die Person tun möchte:
siehe -list 'myfile. * '2> gegen dev / null
find -discover 'myfile. * '2> / tmp pro Fehlerprotokoll
Und beachten Sie, dass Sie jedes Mal, wenn Sie Befehlssequenzen verwenden, wie z.B. den Markt in Klammern sehen, die Ausgabe von welchen Auftragskomponenten erfassen. Zum Beispiel
(find | egrep ^ [RS]. [0-9] + /. svg] | xargs noggin) -a specific 2> / dev / null
Wenn Sie die Klammern weggelassen haben, haben Sie dies stattdessen getan –
Suche
| egrep ^ [RS]. [0-9] + /. svg] | xargs end -1 2> Wird gegen dev / null . sein
Sie sehen wirklich immer noch Zugriffsverweigerungsfehler mit find oder egrep, aber stderr wird definitiv zu xargs umgeleitet.
Wie Sie vielleicht bemerkt haben, haben Sie stderr höchstwahrscheinlich nicht richtig ausgeführt, nachdem Sie sich den Inhalt in einigen Tests angesehen haben.
Beachten Sie, dass normalerweise mit GNU und find
, genau so viel ich weiß, jedes POSIX-kompatible find
die Option zum -print
ist. Sie können es immer noch klar vermitteln, wenn Sie es mögen.
Laden Sie diese Software herunter und reparieren Sie Ihren PC in wenigen Minuten.
Pipe Error Output To Grep
Wyjscie Bledu Potoku Do Grep
Pijpfoutuitvoer Naar Grep
Saida De Erro De Tubo Para Grep
Vyvod Oshibki Kanala V Grep
Output Dell Errore Di Pipe A Grep
Pipe Error Output Till Grep
Salida De Error De Tuberia A Grep
Grep에 파이프 오류 출력
Sortie D Erreur De Tuyau Vers Grep