Wie kann ich das iTerm-Terminal benachrichtigen, wenn ein Auftrag / Prozess abgeschlossen ist?

105

Eine Benachrichtigung im Benachrichtigungscenter wäre ideal, aber auch Knurren, Bounce-Dock, Sound usw. wären in Ordnung (oder wenn dies nur in Terminal.app möglich ist, wäre ich bereit, zurückzuschalten). Gibt es irgendwo in iTerm eine Option zum Aktivieren von Benachrichtigungen oder soll ich diese am Ende eines Befehls im Terminal eingeben? In letzterem Fall ist es möglich, nach dem Start des Prozesses eine Warnung hinzuzufügen (wenn ich beispielsweise feststelle, dass es länger dauern wird, als ich ursprünglich erwartet hatte, kann ich nur schlecht raten).

Wahrheit
quelle

Antworten:

197

Benachrichtigen Sie über einen bereits laufenden Prozess

Verknüpfung: Aoder:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

Gruseliges Auge!: iTermbehält buchstäblich ein Auge (in der oberen rechten Ecke) Ihres Terminals. Sobald der Befehl beendet ist, wird er die Notification Center.

Warum?

Wir haben den Befehl bereits gestartet. Wir haben die für die Fertigstellung benötigte Zeit unterschätzt, wollen sie nicht stornieren und weigern uns, uns hinzusetzen und sie anzusehen. zB a brew updatenach langer Zeit!

Bedarf

iTerm: Shell-Integration:

iTerm2 -> Install Shell Integration

Beachten Sie, dass die Integration keine Benachrichtigungen anzeigt, bis iTerm2 neu gestartet wird.

Paschalis
quelle
11
Nach der Installation der Shell-Integration möchten Sie möglicherweise zu iTerm2 -> Einstellungen -> Profile -> Terminal gehen, nach unten scrollen und "Markierungsindikatoren anzeigen" deaktivieren. Diese Shell-Integration hat mir nicht gefallen. Möglicherweise möchten Sie auch Bearbeiten -> Markierungen und Anmerkungen -> Warnungen -> Benachrichtigung veröffentlichen, wenn Sie die Betriebssystembenachrichtigungen anstelle eines Popups im Warnstil möchten.
Charles L.
@ Simonhamp Ich schlage vor, Trigger ( iterm2.com/documentation-triggers.html ) für vergrabene Sitzungen zu verwenden
Phirschybar
3
@dwanderson Hast du das jemals mit tmux zum Laufen gebracht? Dies wäre so hilfreich
Lucas
@Lucas Es gibt eine Zeile in den Dokumenten, die besagt, dass die Shell-Integration nicht mit tmux oder screen funktioniert. Iterm2.com/documentation-shell-integration.html
Rich Stone
2
Dieses Auge macht mir Angst !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Sie können nach jedem Befehl eine der folgenden Optionen mit einem Semikolon zwischen dem Befehl und dem Befehl hinzufügen:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

oder, wenn Sie Notification Center mögen

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

Sie können auch einen Alias ​​in Ihrem Profil erstellen, diesen aufrufen notifyund am Ende Ihres Befehls hinzufügen. Also in deinem Login-Profil

alias notify="tput bel"

dann

sleep 10; notify

Oder wenn Sie Ihren Befehl gestartet haben und er "hängt", geben Sie einfach ein notifyund drücken EnterSie, und notifyam Ende wird Ihr Alias ​​ausgeführt, wenn der Befehl beendet ist, z

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
quelle
Hmm, mit diesem Befehl osascript -e 'display notification "Task finished" with title "Terminal"'scheine ich diesen Fehler zu bekommen2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
Wahrheit1ness
Teil zwei des Irrtums/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
Wahrheit1ness
Befinden Sie sich auf einem System, das älter als Mavericks oder Yosemite ist?
Mark Setchell
Nein, Yosemite 10.10.3
Wahrheit1ness
Oh, das ist seltsam. Können Sie etwas Einfacheres ausprobieren osascript -e 'display notification "Hello"'- indem Sie von hier aus gezielt kopieren und einfügen.
Mark Setchell
33

Und Sie können immer den sayBefehl verwenden.

Wenn Sie einen langen Prozess im Terminal ausführen und aktualisiert werden möchten, können Sie diesen Befehl normalerweise einfach verwenden, um Dinge wie doneoder erroroder auszusprechen bazinga.

mvn clean install; say done 

Dieser Befehl erstellt eine Java Spring-App und dauert sehr lange. doneNach Abschluss des Vorgangs wird er ausgesprochen.

Farhan Salam
quelle
16

iTerm2unterstützt GrowlBenachrichtigungen. Sie können es in den einzelnen Profileinstellungen aktivieren.

Wählen Sie ein Profil in Preferences…-> Profiles. Dann Terminalgibt es in der Registerkarte eine Option Enable Growl Notifications.

Denken Sie daran, iTermBenachrichtigungen auch in den Einstellungen zu aktivieren Growl.

Wenn Sie eine Benachrichtigung für einen bestimmten Prozess erhalten möchten, können Sie versuchen, damit zu experimentieren Triggers. Sie definieren Trigger auf der AdvancedRegisterkarte in den Profileinstellungen. Auf diese Weise können Sie einer bestimmten Ausgabe Ihres Prozesses (regulärer Ausdruck) eine Growl-Benachrichtigung zuweisen.

Sie könnten zum Beispiel tun:

$ mycommand; echo "end-of-my-process"

Und verbinden Sie den Trigger mit der Meldung "Ende meines Prozesses".

Aktualisieren

Weitere Informationen zu Triggern finden Sie auf iTerm2.com .

baf
quelle
Bin ich also richtig, dass es keine globale Möglichkeit gibt, eine Warnung für einen abgeschlossenen Prozess zu erhalten, da ich das Skript einmal ausführen muss, um zu wissen, was es am Ende des Prozesses schreibt (und ich muss für jedes Skript, das ich ausführe, eine erstellen )? Die letzte Zeile für einen youtube-dl-Prozess ist beispielsweise, [download] 100% of 40.13MiB in 00:13aber diese Zeile wird für jede abgeschlossene Datei wiederholt. Was würde ich für meine Zeichenfolge "Ende meines Prozesses" eingeben? Könnte ich einen Auslöser setzen, wenn meine Standard-Shell-Eingabeaufforderung ~ >erneut angezeigt wird?
Wahrheit
@ truth1ness Ich glaube nicht, dass es eine generische Möglichkeit gibt, über den abgeschlossenen Prozess informiert zu werden. iTermSendet Benachrichtigungen für die neue Terminalausgabe für das Ende der Terminalausgabe. Dies kann für einige Prozesse funktionieren. Ich schlug vor, für alle Prozesse zu arbeiten. Die Nachricht "Ende meines Prozesses" kann eine beliebige eindeutige Zeichenfolge sein. Einzigartig so, dass es von Ihrem Prozess nicht gedruckt wird. Könnte buchstäblich "End-of-my-Process" -Text sein. Sie müssen genau dieselbe Zeichenfolge in die Triggerdefinition eingeben und eine Benachrichtigung anhängen. Ich weiß nicht, ob es mit der Shell-Eingabeaufforderung funktioniert. Sie müssen es selbst versuchen.
baf
Ah, ich habe es falsch verstanden, ich habe es jetzt verstanden. Ich konnte eine Warnung erhalten, die mit der Echoausgabe "Ende meines Prozesses" angezeigt wurde. Ich erhalte jedoch auch eine Warnung, wenn ich den Echo-Befehl tatsächlich ausführe, bevor der Prozess beginnt. Wie würde ich iTerm anweisen, die Zeichenfolge zu ignorieren, wenn ich den Befehl tatsächlich ausgebe und nur die Zeichenfolge echo'd betrachte? In der Hilfedatei habe ich versucht, dem Trigger-Regex \ 0 ("Der gesamte Wert, der mit dem regulären Ausdruck übereinstimmt.") Vorangestellt zu haben, aber der Trigger wird trotzdem zweimal ausgeführt.
Wahrheit
@ truth1ness Seien Sie kreativ, zum Beispiel echo "end-of-""my-process" mit Anführungszeichen. Der Text "Ende meines Prozesses" wird erst nach Abschluss des Prozesses abgeglichen.
baf
9

Es gibt ein OSS-Tool namens noti .

Sie können es einfach mit installieren brew install notiund verwenden, indem Sie Ihrem Befehl " notilike" voranstellen noti sleep 3.

junjian.xu
quelle
3

Sie können auch terminal-notifierMac OS-Systembenachrichtigungen verwenden. So installieren Sie es einfach über Home Brew:

$ brew install terminal-notifier

Wenn Sie dann eine Benachrichtigung anzeigen möchten, wenn Ihre Arbeit / Ihr Prozess abgeschlossen ist, verwenden Sie Folgendes

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

Und diese Anzeige wie folgt:

Geben Sie hier die Bildbeschreibung ein

Sie können auch den Ton und das Symbol der Benachrichtigungen ändern. Weitere Informationen im Github-Repo: https://github.com/julienXX/terminal-notifier

MaSza
quelle
1

Installieren Sie die iTerm2-Shell-Integration

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

Führen Sie Ihren Befehl aus und verketten Sie die Aufmerksamkeits-App, z

./task && ~/.iterm2/it2attention once

Sobald der Auftrag abgeschlossen ist, springt die iTerm-App auf das Symbol.

Sie haben auch andere Aufmerksamkeitsoptionen:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
Leonardo
quelle