Jak sprawić, by terminal iTerm powiadamiał mnie o zakończeniu zadania / procesu?

109

Powiadomienie centrum powiadomień byłoby idealne, ale warczenie, odbijanie stacji dokującej, dźwięk itp. Też byłoby w porządku (lub jeśli można to zrobić tylko w Terminal.app, chciałbym się przełączyć z powrotem). Czy jest gdzieś w iTermie opcja włączania powiadomień, czy jest to coś, co mam wpisać na końcu polecenia w terminalu? Jeśli to drugie, czy można dodać alert po rozpoczęciu procesu (na przykład, jeśli zdaję sobie sprawę, że potrwa to dłużej, niż początkowo oczekiwałem, źle zgaduję).

prawdziwość
źródło

Odpowiedzi:

205

Powiadom o już uruchomionym procesie

Skrót: Alub:

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

Straszne oko!: iTermdosłownie będzie mieć oko (w prawym górnym rogu) twojego terminala. Po zakończeniu polecenia skontaktuje się z Notification Center.

Czemu?

Uruchomiliśmy już polecenie. Nie doceniliśmy czasu realizacji, nie chcemy go odwoływać, odmawiamy siedzenia i oglądania. np. brew updatepo długim czasie!

Wymagania

iTerm: Integracja z powłoką:

iTerm2 -> Install Shell Integration

Zwróć uwagę, że integracja nie wyświetli powiadomień, dopóki iTerm2 nie zostanie ponownie uruchomiony.

Paschalis
źródło
13
Po zainstalowaniu integracji powłoki możesz zechcieć przejść do iTerm2 -> Preferencje -> Profile -> Terminal, przewiń w dół i odznacz „Pokaż wskaźniki znaczników”, nie podobała mi się ta integracja powłoki. Możesz także chcieć Edycja -> Oznaczenia i adnotacje -> Alerty -> Opublikuj powiadomienie, jeśli chcesz otrzymywać powiadomienia systemu operacyjnego zamiast wyskakującego okienka w stylu alertu.
Charles L.
@simonhamp Sugeruję użycie wyzwalaczy ( iterm2.com/documentation-triggers.html ) do sesji pogrzebanych
phirschybar
3
@dwanderson Czy kiedykolwiek korzystałeś z tego w tmux? To byłoby bardzo pomocne
Lucas
@Lucas w dokumentach znajduje się wiersz, który mówi, że integracja powłoki nie działa z tmux lub screen iterm2.com/documentation-shell-integration.html
Rich Stone
2
To oko mnie przeraża !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Możesz dodać dowolne z poniższych poleceń po każdym poleceniu, z średnikiem między poleceniem a nim:

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

osascript -e 'beep 3'

tput bel

lub jeśli lubisz Centrum powiadomień

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

Możesz także utworzyć alias w swoim profilu, wywołać go notifyi dodać na końcu polecenia. Więc w swoim profilu logowania

alias notify="tput bel"

następnie

sleep 10; notify

Lub, jeśli uruchomiłeś swoje polecenie i jest "zawieszone", po prostu wpisz notifyi naciśnij, Entera na końcu uruchomi twój notifyalias, gdy polecenie zakończyło się, np.

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
źródło
Hmm, przy tym poleceniu osascript -e 'display notification "Task finished" with title "Terminal"'wydaje mi się, że otrzymuję ten błąd2015-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:
true1ness
część druga błędu/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.
prawda 1
Czy korzystasz z systemu starszego niż Mavericks lub Yosemite?
Mark Setchell
Nie, Yosemite 10.10.3
true1ness
Och, to dziwne. Czy możesz spróbować czegoś prostszego, np. osascript -e 'display notification "Hello"'Kopiując i wklejając stąd.
Mark Setchell
33

I zawsze możesz użyć saypolecenia.

Zwykle, gdy uruchamiasz długi proces w terminalu i chcesz uzyskać aktualizację, możesz po prostu użyć tego polecenia, aby wypowiedzieć takie rzeczy, jak donelub errorlub bazinga.

mvn clean install; say done 

To polecenie tworzy aplikację wiosenną java i zajmuje dużo czasu, a donepo zakończeniu procesu będzie mówić głośno .

Farhan Salam
źródło
16

iTerm2obsługuje Growlpowiadomienia. Możesz go włączyć w ustawieniach każdego profilu.

Wybierz profil w Preferences…-> Profiles. Następnie w Terminalzakładce jest opcja Enable Growl Notifications.

Pamiętaj, aby również włączyć iTermpowiadomienia w Growlpreferencjach.

Jeśli chcesz otrzymać powiadomienie o danym procesie, możesz spróbować poeksperymentować Triggers. Wyzwalacze definiuje się na Advancedkarcie w ustawieniach profilu. W ten sposób możesz przypisać powiadomienie Growl do określonego wyjścia twojego procesu (regexp).

Możesz na przykład zrobić:

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

I połącz wyzwalacz z komunikatem „koniec mojego procesu”.

Aktualizacja

Przeczytaj więcej o wyzwalaczach na iTerm2.com .

baf
źródło
Więc mam rację, że nie ma globalnego sposobu na uzyskanie ostrzeżenia o każdym zakończonym procesie, ponieważ muszę raz uruchomić skrypt, aby wiedzieć, co zapisuje na końcu procesu (i muszę utworzyć jeden dla każdego uruchamianego skryptu )? Na przykład ostatnia linia dla procesu youtube-dl jest [download] 100% of 40.13MiB in 00:13taka, ale ta linia jest powtarzana dla każdego kończonego pliku. Co powinienem wstawić jako napis „koniec mojego procesu”? Czy mogę wyzwalać, gdy ~ >ponownie pojawi się domyślny monit powłoki ?
true1ness
@ true1ness Nie sądzę, że istnieje ogólny sposób uzyskania informacji o zakończonym procesie. iTermwysyła powiadomienia o nowym wyjściu terminala, o końcu wyjścia terminala. Może to działać w przypadku niektórych procesów. Zasugerowałem sposób pracy dla wszystkich procesów. Komunikat „koniec mojego procesu” może być dowolnym unikalnym ciągiem. Unikaj tego w taki sposób, że nie zostanie wydrukowany w Twoim procesie. Może to być dosłownie tekst „koniec mojego procesu”. Musisz wprowadzić dokładnie ten sam ciąg w definicji wyzwalacza i dołączyć do niego powiadomienie. Nie wiem, czy zadziała z zachętą powłoki. Musisz sam tego spróbować.
baf
Ach, źle zrozumiałem, teraz to rozumiem. Udało mi się uzyskać alert, który wyskakuje z wyjściem echa „koniec mojego procesu”. Jednak pojawia się również alert, gdy faktycznie wydam polecenie echo przed rozpoczęciem procesu. Jak mam powiedzieć iTerm, aby zignorował ciąg, kiedy faktycznie wydam polecenie i patrzę tylko na ciąg, który odbija się echem? Z pliku pomocy próbowałem poprzedzić wyrażenie regularne wyzwalacza \ 0 („Cała wartość dopasowana przez wyrażenie regularne.”), Ale nadal dwukrotnie uruchamia wyzwalacz.
true1ness
@ true1ness Bądź kreatywny, na przykład używaj echo "end-of-""my-process" z cudzysłowami w środku. Dopasuje tekst „end-of-my-process” tylko po zakończeniu procesu.
baf
9

Istnieje narzędzie OSS o nazwie noti .

Możesz go łatwo zainstalować brew install notii zacząć go używać, po prostu poprzedzając polecenie znakiem notilike noti sleep 3.

junjian.xu
źródło
3

Możesz także skorzystać z terminal-notifierpowiadomień systemu Mac OS. Aby zainstalować go przez Home brew, wystarczy:

$ brew install terminal-notifier

Następnie, jeśli chcesz wyświetlić powiadomienie o zakończeniu pracy / procesu, użyj czegoś takiego

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

I taki wyświetlacz:

wprowadź opis obrazu tutaj

Możesz także zmienić dźwięk i ikonę powiadomień. Więcej informacji w repozytorium github: https://github.com/julienXX/terminal-notifier

MaSza
źródło
1

Zainstaluj integrację powłoki iTerm2

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

Wykonaj polecenie i połącz aplikację uwagi, np

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

Spowoduje to, że aplikacja iTerm odrzuci swoją ikonę po zakończeniu zadania.

Masz również inne opcje uwagi:

$ .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
źródło