Nachdem ich von raring aufgerüstet habe, starte ich den fantastischen Fenstermanager auf Trusty. In meiner Desktop-Umgebung werden absichtlich nicht alle Gnome / Freedesktop-Dämonen ausgeführt - ich möchte sie nicht.
Wenn ich gedit
von einem Terminal wie diesem ausführe :
gedit file
Es gibt Nachrichten wie diese überall auf meinem Terminal aus, wenn ich die Eingabetaste drücke, speichere oder bei verschiedenen anderen Gelegenheiten:
(gedit:5700): Gtk-WARNING **: Calling Inhibit failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files
Ich verstehe die Bedeutung dieser Warnung und habe entschieden, dass es mir egal ist.
Wie kann ich diese Art von Warnung ausschalten ? Mit "Ausschalten" meine ich keine der folgenden oder ähnlichen Problemumgehungen:
- Leiten der Ausgabe von gedit in
/dev/null
- Schreiben eines Wrapper-Skripts, in das die Ausgabe von gedit geleitet wird
/dev/null
- Erstellen eines Alias, in den die Ausgabe von gedit geleitet wird
/dev/null
Diese Problemumgehungen sind nicht akzeptabel, da sie für jede Gnome-Anwendung einzeln angewendet werden müssen - gedit ist nicht die einzige, die das Terminal durcheinander bringen möchte.
export GCONF_DEBUG="no"
ich irgendetwas tun würdeAntworten:
Erstens finde ich es auch ärgerlich, dass diese Warnungen auf einem Standard-Ubuntu angezeigt werden und keine "richtige" Methode zum Deaktivieren vorhanden ist, die ich finden könnte (anscheinend ist die häufigste "Lösung" entweder die Installation
gir1.2-gtksource-3.0
das scheint nicht zu funktionieren, da es bereits installiert ist, oder sie zu ignorieren - aber ich möchte sie vollständig unterdrücken, da sie mein Terminal nur laut machen.Ich habe den folgenden Code gefunden, der sich bisher genau so zu verhalten scheint, wie ich es erwartet hätte. Er basiert auf der Antwort von TuKsn, verbessert ihn jedoch ein wenig:
gedit ...
), ohne F12 oder eine andere Verknüpfung verwenden zu müssen (um die ungefilterte Verwendung aufzurufen/usr/bin/gedit ...
).Kann noch ein bisschen verallgemeinert werden, aber wenn Sie für andere Befehle die gleiche Behandlung benötigen, duplizieren Sie die
gedit()
Funktion für jeden anderen Befehlsnamen, der denselben Filter benötigt.Und eine bessere Version (viel kleiner, voll generisch, keine Notwendigkeit, den Verlauf neu zu schreiben, seitdem er aufgerufen wurde, und besser zum Filtern pro Zeile als für die gesamte Ausgabe):
quelle
Es ist auch eine Problemumgehung, aber Sie müssen dies nicht für jede Anwendung anwenden.
Schreiben Sie dies in Ihr
.bashrc
und Sie können diesen Wrapper mit F12 (oder einer anderen Taste) verwenden, um die Warnungen zu unterdrücken:quelle
Ich habe das Tool zum Ausblenden von Warnungen in C geschrieben, das für mich viel einfacher zu verwenden ist als das oben gezeigte Skript. Außerdem werden alle Ausgaben geschrieben, in die
stdout
standardmäßig geschrieben wurde (da die Gtk- und andere Warnungen an gesendet werden,stderr
sodass siestderr
nichtstdout
standardmäßig analysiert werden).Ein großes Problem mit dem obigen Skript ist, dass es nichts auf Ihre Konsole schreibt, auch wenn es nicht mit dem regulären Ausdruck übereinstimmt, bis es fertig ist. Dies liegt daran, dass alle Daten in einer Variablen gespeichert werden und diese Variable anschließend überprüft wird. Dies bedeutet auch, dass die Ausgabe in dieser Variablen gespeichert wird, möglicherweise unter Verwendung von viel Speicher (zumindest sollten Sie dies in einer temporären Datei speichern.) Schließlich verhindert das grep, wie ich sehe, jede Anzeige, wenn eine Zeile übereinstimmt . Vielleicht nicht genau das, was du willst.
Das Tool kann in einem einfachen Alias wie folgt verwendet werden:
(Ich benutze
gvim
... ich bin sicher, es würde auch funktionierengedit
.)Die Datei ist in sich geschlossen, keine anderen Abhängigkeiten als die C-Bibliothek, sodass Sie eine Kopie erhalten und diese einfach kompilieren und installieren können:
Die Datei enthält einige weitere Dokumentationen, die Sie
--help
nach dem Kompilieren für Schnelldokumentationen verwenden können.Die neuere Version , die irgendwann die advgetopt-Bibliothek verwenden wird, ist in C ++.
quelle
Ich war auf der Suche nach einem Dienstprogramm, um diese Art von Problem selbst zu lösen.
Meine Probleme mit den bereitgestellten Antworten lauten wie folgt:
Ich schätze die Versuche, die ich gesehen habe, um dies mit Bash zu tun, aber ich konnte keine Lösung identifizieren, die alle drei oben beschriebenen Bedingungen erfüllte.
Meine ultimative Lösung ist in NodeJS geschrieben, was meines Wissens nicht auf vielen Linux-Boxen installiert werden kann. Bevor ich mich entschied, die JS-Version zu schreiben, habe ich versucht, sie in Python zu codieren, und festgestellt, dass die asynchrone E / A-Bibliothek ziemlich hässlich und kaputt ist, bis SEHR aktuelle Versionen von Python (~ 3.5, die in EINIGEN neueren Distributionen sofort verfügbar sind).
Das Minimieren von Abhängigkeiten war der EINZIGE Grund, warum ich mich für Python entschieden habe. Deshalb habe ich es für NodeJS aufgegeben, das eine bemerkenswerte Sammlung von Bibliotheken für asynchrone E / A-Vorgänge auf niedriger Ebene enthält.
Hier ist es:
Um dieses Skript zu verwenden, können Sie Ihrer .bashrc-Datei die folgenden Zeilen hinzufügen:
Der Subprozess, den Sie ausführen, übernimmt stdin, sodass Sie BASH-Pipes oder Umleitungen verwenden können.
quelle