Benachrichtigungen beim Beenden langwieriger Prozesse

Avatar von Christoph Langner

2 Min. Lesezeit

9 Aufrufe

Manchmal sind es die kleinen Dinge, die Usability ausmachen. Ubuntu-Entwickler Dustin Kirkland hat sich so einen kleinem Fall angenommen. Führt man einen Prozess in einem Terminal aus, der etwas länger dauern wird, so wird man wohl kaum das Terminal im Auge behalten. Somit verpasst man auch das Ende des Prozesses. Dustin hat sich nun ein…

Benachrichtung bei Ende eines langandauernden Tasks

Manchmal sind es die kleinen Dinge, die Usability ausmachen. Ubuntu-Entwickler Dustin Kirkland hat sich so einen kleinem Fall angenommen. Führt man einen Prozess in einem Terminal aus, der etwas länger dauern wird, so wird man wohl kaum das Terminal im Auge behalten. Somit verpasst man auch das Ende des Prozesses. Dustin hat sich nun ein kleines Alias-Kommando ausgedacht, das man an den Prozess-Aufruf anhängt und das dann beim Beenden des Prozesses über das Benachrichtigungssystem von Ubuntu die entsprechende Information ausgibt.

Das Kommando wird über ein so genanntes Alias dem System bekannt gemacht, so braucht man kein Shell-Skript anzulegen. Öffnet daher die ~/.bashrc in euren bevorzugten Editor gedit ~/.bashrc und fügt die folgenden Zeilen am Ende der Datei ein.

# Benachrichtigungen bei langen Prozessen
if [ -x /usr/bin/notify-send ]; then
  alias alert='notify-send -i gnome-terminal "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'
fi

Die if-Abfrage überprüft ob das Programm notify-send aus dem Paket libnotify-bin installiert ist und falls ja, dann wird das Alias gesetzt. Überprüft daher ob das besagte Paket auch installiert ist. Der Abschließende Befehl initialisiert die Bash neu…

$ sudo apt-get install libnotify-bin
$ . ~/.bashrc

Nun könnt Ihr durch das Anfügen von ; alert eine Benachrichtigung auslösen, sobald ein Befehl abgearbeitet wurde. Natürlich macht das nur Sinn, wenn Ihr wisst dass der Befehl länger laufen wird.

# Allgemein
$ befehl; alert
# Beispiel
$ wget http://speedtest.netcologne.de/test_1mb.bin; alert

Ich hatte das eigentlich schon immer über ein $befehl; beep gemacht, doch die Benachrichtigung inklusive dem Exit-Code des Befehls ist deutlich eleganter. Klasse wäre das natürlich, wenn sowas von Haus aus im Terminal eingebaut wäre und eine Benachrichtigung ausgegeben werden würde, wenn ein Befehl x Sekunden zur Ausführung braucht und/oder das Terminal gerade minimiert/verdeckt ist.

Ähnliche Beiträge

27 Kommentare zu „Benachrichtigungen beim Beenden langwieriger Prozesse“

  1. Avatar von Robert

    Wie sagt man so schön: Klein aber fein.:)

    Robert

  2. Avatar von sowbug

    Vielen Dank für das kleine Script! Wunderbar!

    Allerdings musste ich einen Zeilenumbruch vor dem „fi“ einfügen da ich sonst initialisieren einen Fehler bekommen habe.

  3. Avatar von Andreas

    Bei mir ging es erst, als ich das letzte „fi“ in eine neue Zeile verschob.

    1. Avatar von Christoph

      Danke für den Hinweis. Hatte nur kurz vom dem Veröffentlichen etwas geändert und dabei wohl den Zeilenumbruch gekillt. Habs im Artikel angepasst.

  4. Avatar von Hubert

    Netter Hinweis. Bei mir erscheint aber noch das „; altert“ am Ende. Stimmt da was bei sed nicht? Auch die [0] am Anfang ist nicht so schön 😀

    1. Avatar von sgo

      Ich fand die Ausgabe auch etwas unübersichtlich/nicht ganz so hübsch und hab mir deshalb das Script etwas umgeschrieben.


      # Benachrichtigungen bei langen Prozessen
      if [ -x /usr/bin/notify-send ]; then
      alias alert='notify-send -i gnome-terminal "Command executed" \ "Error Code: [$?]
      $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'
      fi

      Die Ausgabe:

      * Command executed (fett geschrieben)
      * Error Code: [x] (normale Schrift)
      * [ausgeführter Befehl] (normale Schrift)

      Man kann auch noch ein eigenes Icon einfügen (-i, –icon=ICON) und die Anzeigedauer verändern (-t, –expire-time=TIME). Je nachdem, wie man es mag.

      PS: Kann man in den Kommentaren irgendwie einen Codeblock o.ä. verwenden?

      1. Avatar von Christoph

        Yep, entweder nutzt du und und/oder und . Das pre-Tag bricht die Zeilen um und der Code-Tag verhindert, dass Anführungszeichen oder doppelte Minus-Zeichen wie in --enable umgebaut werden.

    2. Avatar von moe

      Hatte das selbe Problem wenn der Befehl mit einem Leerzeichen endete. Ein zusätzliches \s* zwischen alert und $ hat geholfen.

  5. Avatar von Christoph

    > Bei mir erscheint aber noch das “; altert” am Ende.

    Das ;alert sollte eigentlich nicht erscheinen. Hast du den Befehl komplett übernommen? Der alias-Befehl sollte in einer Zeile erscheinen.

    > Auch die [0] am Anfang ist nicht so schön

    Das ist der Error-Code. Die 0 heißt „Alles OK“. Es ist also kein Schönheitsfehler, sondern eine nützliche Information 🙂

  6. Avatar von Tim

    Hallo Christoph,

    darf ich fragen wie du ein monochromes Shutter Icon bekommen hast?

    Ich bin schon lange auf der Suche nach einer Lösung dafür wurde aber bisher nicht fündig

    1. Avatar von Christoph

      Hallo Tim, die aktuelle Version von Shutter bringt die monochromen Icons von Haus aus mit. Dazu musst du Shutter jedoch über das shutter-testing-team PPA aktualisieren. Siehe http://shutter-project.org/downloads/

  7. Avatar von Tim

    Danke,

    ich hatte diese Quelle verwendet
    https://launchpad.net/~shutter/+archive/ppa

    Jetzt ist das Icon auch schön grau bei mir 🙂

  8. Avatar von Kai

    Hi,

    weiß jemand von euch, wie man das Benachrichtigungssystem in KDE (4.5) anspricht?

    1. Avatar von Schiwi


      if [ -x /usr/bin/kdialog ]; then
      alias alert='kdialog --title "Konsole - Programm beendet:" --passivepopup "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'
      fi

      Funktioniert aber auch mit notify-send, sieht bloß nicht so hübsch aus wie mit kdialog 😉

  9. Avatar von johannes

    hallo! cooles alias!
    besteht eigentlich auch die möglichkeit, von Server A bei beendigung des prozesses ein Notify an einen Client B senden?
    Danke für inspiration 🙂

    1. Avatar von Christoph

      Müsste gehen. Schau dir das mal an… http://cweiske.de/tagebuch/DBus%20notify-send%20over%20network.htm

      1. Avatar von johannes

        danke,
        das habe ich mir mal angesehen. schon ein ziemlicher hack irgendwie… aber ich werds mal probieren 😉

        1. Avatar von johannes

          So gehts auch….einfacher!

          ssh -X user@client ‚DISPLAY=:0 notify-send „TEST MESSAGE.“‚

          auth per keyfile

  10. Avatar von tim

    Danke für den Tipp!

  11. Avatar von Karsten

    Man kann es auch per Jabber, also z.B. mit sendxmpp ausgeben…so kann man sich auch auf anderen Rechnern oder am Handy benachrichtigen lassen.

    1. Avatar von Christoph

      Das ist eigentlich auch eine coole Lösung. Mal schauen ob ich die Tage noch einen Blogbeitrag dazu hinbekomme. Danke für den Hinweis.

  12. Avatar von äxl

    Etwas OT und ich weiß auch nicht ob das überhaupt möglich ist:
    Ich würde gerne den Alarm zu einem laufendem Befehl nachträglich hinzuzufügen, à la: Strg+Z, bg;alert
    Die bashrc neu zu initialisieren sollte, denke ich, kein Problem sein …

  13. Avatar von Alex B

    Hallo Christoph,

    vielen Dank für das nette Skript. Leider funktioniert das nicht, wenn man im Terminal gerade als root angemeldet ist. Gibt es für diesen Fall auch eine elegante Lösung?

    Herzliche Grüße,
    Alex

    1. Avatar von Christoph

      Hi Alex, schau mal hier http://ubuntuforums.org/showthread.php?t=775170 rein, vielleicht funktioniert die Lösung ja auch noch mit aktuellen Ubuntus. Grüße, Christoph.

      1. Avatar von äxl

        Das alias unter /root/.bashrc eintragen sollte reichen. Als root dann noch die Datei sourcen, fertig. Oder?

  14. Avatar von Christoph
    Christoph

    Hi und vielen Dank! Super Tipp und ist sofort zu den Alias’en in die bashrc gewandert. Fällt jemandem noch ein Weg ein wie man mit einem Click das passende Terminal vorholen kann?
    Weder zenity noch notify-send scheinen das zu unterstützen..

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Markdown wird unterstützt: **fett**, _kursiv_, [Linktext](URL), `Code`, Zeilen mit - für Listen, 1. für nummerierte Listen, dreifache Backticks für Codeblöcke.

Über den Blog

Linux und Ich ist ein unabhängiger Blog rund um GNU/Linux-Distributionen, freie Software, Raspberry Pi, Android und Hardware für Bastler und Umsteiger.

Zuletzt auf Mastodon

Gesten Abend noch schnell verbloggt: tfm bringt Seitenleiste, Tabs, Zwei-Fenster-Ansicht und Mausbedienung ins Terminal – ein Dateimanager für alle, die dort ohnehin am liebsten arbeiten. Noch mit kleinen Beta-Macken, aber…

Kategorien

Blog unterstützen

Gefällt dir der Blog? Mit einer kleinen Spende hilfst du, Hosting und neue Testgeräte zu finanzieren.

Linux und Ich — Benachrichtigungen beim Beenden langwieriger Prozesse
https://linuxundich.de/gnu-linux/benachrichtigungen-beim-beenden-langwieriger-prozesse/ — gedruckt am 17. September 2026