Korzystam z niesamowitego menedżera okien na zaufanym po aktualizacji z raring. Moje środowisko pulpitu celowo nie ma uruchomionych wszystkich demonów Gnome / Freedesktop - nie chcę ich.
Kiedy wykonuję gedit
z takiego terminalu:
gedit file
Wysyła takie komunikaty na całym terminalu za każdym razem, gdy nacisnę klawisz Enter, zapisz lub przy różnych innych okazjach:
(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
Rozumiem znaczenie tego ostrzeżenia i zdecydowałem, że nie ma to dla mnie znaczenia.
Jak mogę wyłączyć tego rodzaju ostrzeżenie? Przez „wyłącz” nie rozumiem żadnego z tych lub podobnych obejść:
- przesyłanie danych wyjściowych programu gedit do
/dev/null
- napisanie skryptu opakowującego, który potokuje dane wyjściowe gedit
/dev/null
- tworzenie aliasu, w którym przesyłane są dane wyjściowe programu gedit
/dev/null
Te obejścia są niedopuszczalne, ponieważ muszą być stosowane indywidualnie do każdej aplikacji Gnome - gedit nie jest jedynym, który lubi zepsuć terminal.
export GCONF_DEBUG="no"
zrobiłbym cokolwiekOdpowiedzi:
Po pierwsze, denerwuje mnie również to, że te ostrzeżenia pojawiają się w gotowym systemie Ubuntu, bez żadnej „właściwej” metody ich wyłączenia, którą mógłbym znaleźć (wydaje się, że najczęstszym „rozwiązaniem” jest instalacja
gir1.2-gtksource-3.0
co wydaje się nie działać, ponieważ jest już zainstalowane lub je zignorować - ale chcę je całkowicie ukryć, ponieważ powodują one hałas w moim terminalu).Wymyśliłem następujący kod, który do tej pory wydaje się zachowywać dokładnie tak, jak się tego spodziewałem i jest oparty na odpowiedzi TuKsn, ale nieco go ulepsza:
gedit ...
) bez potrzeby używania F12 lub innego skrótu (aby wywołać niefiltrowane użycie/usr/bin/gedit ...
).Nadal można trochę uogólnić, ale na razie, jeśli potrzebujesz takiego samego traktowania dla innych poleceń, powiel
gedit()
funkcję dla każdej nazwy polecenia, która wymaga tego samego filtra.I lepsza wersja (znacznie mniejsza, w pełni ogólna, nie ma potrzeby przepisywania historii, ponieważ jest wywoływana w obecnej postaci, i lepsza do filtrowania według wiersza niż całego wyniku):
źródło
Jest to również obejście, ale nie musisz stosować tego do każdej aplikacji.
Napisz to do siebie
.bashrc
i możesz użyć tego opakowania z klawiszem F12 (lub wybrać inny klucz), aby ukryć ostrzeżenia:źródło
Właściwie napisałem narzędzie ukrywania ostrzeżeń w C, które jest o wiele łatwiejsze w użyciu niż skrypt pokazany powyżej. Będzie również napisać wszystkie dane wyjściowe do pisemnego
stdout
domyślnie (bo GTK i inne ostrzeżenia wysyłane sąstderr
tak analizujestderr
niestdout
domyślnie).Jednym z dużych problemów z powyższym skryptem jest to, że nie napisze niczego na konsoli, nawet jeśli nie będzie pasować do wyrażenia regularnego, dopóki nie zostanie wykonane. Jest tak, ponieważ zapisuje wszystkie dane w zmiennej, a następnie grep tej zmiennej po zakończeniu. Oznacza to również, że zapisze dane wyjściowe w tej zmiennej, prawdopodobnie wykorzystując dużo pamięci (przynajmniej powinieneś zapisać to w pliku tymczasowym). Wreszcie, z tego co widzę, grep zapobiegnie wyświetleniu, jeśli jakakolwiek linia będzie pasować . Może nie dokładnie to, czego chcesz.
Narzędzia można użyć w prostym aliasie:
(Używam
gvim
... jestem pewien, że to też zadziałagedit
.)Plik jest samowystarczalny, bez zależności innych niż biblioteka C, dzięki czemu można uzyskać kopię oraz łatwo skompilować i zainstalować:
Plik zawiera dodatkową dokumentację, której można użyć
--help
po skompilowaniu do szybkich dokumentów.Nowsza wersja , która w pewnym momencie będzie korzystać z biblioteki advgetopt, jest w C ++.
źródło
Sam szukałem narzędzia do rozwiązania tego rodzaju problemu.
Moje problemy z udzielonymi odpowiedziami są następujące:
Doceniam próby, które widziałem, aby to zrobić z Bash, jednak nie udało mi się znaleźć rozwiązania, które spełniło wszystkie 3 warunki opisane powyżej.
Moje najlepsze rozwiązanie zostało napisane w NodeJS, które, jak rozumiem, nie będzie instalowane na wielu urządzeniach z Linuksem. Zanim zdecydowałem się napisać wersję JS, próbowałem zakodować ją w Pythonie i odkryłem, że asynchroniczna biblioteka IO jest dość brzydka i zepsuta aż do BARDZO najnowszych wersji Pythona (~ 3.5, które jest dostępne gotowe w NIEKTÓRYCH nowszych dystrybucjach).
Minimalizowanie zależności było JEDYNYM powodem wyboru Pythona, więc porzuciłem go dla NodeJS, który ma niezwykły zestaw bibliotek dla nieco niższego poziomu, IO zorientowanego na asynchronię.
Oto on:
Aby użyć tego skryptu, możesz dodać następujące wiersze do pliku .bashrc:
Podproces, który wybierzesz do uruchomienia, odziedziczy stdin, więc możesz swobodnie korzystać z potoków BASH lub przekierowań.
źródło