Miejsce, w którym pracuję, ma polecenia, których wykonanie zajmuje dużo czasu.
Czy istnieje polecenie / narzędzie, którego mogę użyć, aby powiadomić mnie o zakończeniu wykonywania polecenia? Może to być wyskakujące okienko lub dźwięk.
Miejsce, w którym pracuję, ma polecenia, których wykonanie zajmuje dużo czasu.
Czy istnieje polecenie / narzędzie, którego mogę użyć, aby powiadomić mnie o zakończeniu wykonywania polecenia? Może to być wyskakujące okienko lub dźwięk.
Odpowiedzi:
Ogólnie rzecz biorąc, jeśli wiesz o tym przed uruchomieniem polecenia, możesz po prostu uruchomić go za pomocą:
command; command-after &
Spowoduje to wykonanie polecenia command-after
po wyjściu z poprzedniego polecenia (niezależnie od kodu wyjścia). &
Rozpocznie go w tle.
Jeśli zależy Ci na pomyślnym lub nieudanym wyjściu, użyj odpowiednio:
command && command-after-only-if-success &
command || command-after-only-if-fail &
Jeśli polecenie już się rozpoczęło, możesz użyć kontroli zadań, aby go zawiesić, a następnie powrócić na pierwszy plan z fg
łańcuchem z powiadomieniem:
command
# enter Ctrl-z
fg ; command-after
Teraz ... to, co chcesz zrobić, zależy od twojego środowiska.
W dowolnym systemie można „zadzwonić” dzwonkiem terminala . Zależy od twojego systemu, co naprawdę działa (BSD vs. GNU Linux itp.), Ale tput bel
powinno działać. Jednak nie mogłem tego teraz niezawodnie przetestować. Wyszukaj „dzwonek”, aby dowiedzieć się więcej.
W systemie Mac OS X można użyć AppleScript, aby wyświetlić okno dialogowe Findera:
osascript -e 'tell Application "Finder" to display dialog "Job finished" '
Mógłbyś powiedzieć coś do ciebie:
say "Job finished"
Lub możesz skorzystać z systemu powiadomień Mountain Lion:
sudo gem install terminal-notifier # <= only need to do this once
terminal-notifier -message "Job finished!" -title "Info"
W GNOME , zenity
może pokazać się okno dialogowe GTK, zwany z wiersza poleceń. Zobacz także pytanie Przepełnienie stosu: wyświetlanie okna komunikatu ze skryptu bash w systemie Linux . Można go zainstalować za pomocą ulubionego menedżera pakietów.
zenity --info --text="Job finished"
Niektóre dystrybucje mogą mieć xmessage
. Jest specjalnie dla środowisk GTK gxmessage
.
W środowiskach pulpitu, które implementują specyfikację powiadomień pulpitu , takich jak Ubuntu i GNOME , istnieje system powiadomień, który można uruchamiać za pomocą notify-send
(części libnotify
).
notify-send "Job finished!"
KDE używa kdialog
na przykład:
kdialog --passivepopup 'Job finished'
(command; command-after) &
?
W systemach uniksowych możesz zadzwonić dźwiękiem:
echo -e "\a"
tput bel
Stworzyłem proste narzędzie dla MacOS X, które właśnie to robi. https://github.com/vikfroberg/brb
Instalacja
$ npm install -g brb
Instrukcje
$ sleep 3; brb
Aby uzyskać powiadomienie dźwiękowe, możesz użyć spd-say "Some text"
. Przykład:
some-command; spd-say "Yo"
sudo apt-get install speech-dispatcher
. Lub skorzystaj z alternatywy askubuntu.com/questions/501910/…
Właśnie zacząłem używać notifu do powiadomień na pulpicie od Cygwin. Jest to aplikacja do powiadamiania z wiersza poleceń dla systemu Windows.
Przykład:
ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
Napisałem ntfy
właśnie w tym celu. Jest wieloplatformowy i może automatycznie wysyłać powiadomienia po zakończeniu długotrwałych poleceń.
Jeśli masz Pythona pip
(większość dystrybucji Linuksa i MacOS to ma), oto jak go zainstalować i włączyć automatyczne powiadomienia:
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
Sprawdź to na http://ntfy.rtfd.io
Oprócz tego może również:
W przypadku Linuksa jest sprytna sztuczka, aby to zrobić automatycznie, bez konieczności wpisywania polecenia za każdym razem.
Najpierw zainstaluj autokey. Pomaga to zdefiniować działania dla różnych naciśnięć klawiszy.
sudo apt-get install autokey-gtk
Teraz zdefiniuj nową frazę w autokey i przypisz skrót klawiszowy jako Alt + Enter. Dodaj tę frazę:
; notify-send "Job finished!" &
#
Zauważ, że nowa linia po pierwszej linii jest ważna.
Dodaj także filtr okna. Używam guake i terminalu. Uwzględnij dowolny inny używany terminal.
.*(guake)|(Terminal).*
Jesteś skończony!!
Teraz za każdym razem, gdy potrzebujesz powiadomień o poleceniu, uruchom je za pomocą Alt + Enter zamiast Enter / Return.
Źródło: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html
Chociaż inne odpowiedzi już obejmowały większość sposobów otrzymywania powiadomień o ukończonej pracy, chcę dać moje dwa centy, ponieważ zadałeś pytanie w następującym formacie:
Miejsce, w którym pracuję, ma polecenia, których wykonanie zajmuje dużo czasu.
Mam ten sam problem. Czasami coś może działać przez 15 minut.
Mam następującą funkcję w moim .bashrc:
# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
curl -s -F "token=PUSHOVER_TOKEN" \
-F "user=PUSHOVER_USER" \
-F "title=terminal" \
-F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}
Korzysta z aplikacji Pushover, aby przesłać powiadomienie na mój telefon. W ten sposób mogę iść na lunch lub wziąć udział w spotkaniu i nadal otrzymywać powiadomienia o zadaniach rozpoczętych na komputerze przed wyjazdem.
Używam go w następujący sposób:
command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
Tak więc, jeśli polecenie zwróci prawidłowy kod wyjścia, zostanie wykonane pierwsze wypchnięcie. W przypadku błędu zostanie wykonany drugi.
Często musisz utworzyć użytkownika w Pushover i zarejestrować aplikację, aby wysyłać powiadomienia z https://pushover.net/
mam nadzieję, że to pomogło!
Jeśli używasz csh lub tcsh jako interaktywnej powłoki, możesz użyć notify
polecenia:
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
Możesz osiągnąć podobny efekt w bashu za pomocą set -b
lub set -o notify
.
Prawdopodobnie nie spełnia Twoich wymagań, ponieważ wystarczy wydrukować wiadomość; Nie sądzę, że można to skonfigurować tak, żeby wyskoczyło okno lub zadzwoniło.
W systemach z „awk” spróbuj
awk 'BEGIN{ print "\a" }'
był jedynym, który dla mnie pracował.
Jeśli używasz, npm
to węzeł-powiadomienie zapewnia rozwiązanie dla wielu platform .
notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "
Chciałbym zauważyć ten wątek lata temu. Moje rozwiązanie było w zasadzie takie samo jak rozwiązanie slhck, ale napisałem skrypt. Używam tego cały czas. Publikowanie tutaj, aby je udostępnić.
#!/bin/bash
msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi
echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
unset WINDOWID
exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
if ! $quiet; then say "done" &; fi
osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
echo $msg
fi
Jedno małe wyjaśnienie: ciąg znaków "\x1b]0;$msg\a"
jest sekwencją ucieczkową ANSI, która umieszcza komunikat na pasku tytułowym okna, z którego został wykonany. Czasami bardzo mi się przydaje, aby zobaczyć, z którego okna pochodzi wiadomość.
To przychodzi dość późno, ale zacząłem używać do tego systemu: mam skrypt bash, który wykonuje każde polecenie, które zostanie mu przekazane
http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/
#!/bin/bash
# file location : /usr/bin/n
set +e
# $@ executes whatever command is typed after the filename
$@
notify-send "Task Completed"
a potem po prostu dodam n
n bundle install
n npm install
Inną możliwością jest użycie alert
, Działa w systemie Linux.
>any-command; alert
Daje powiadomienie jak na obrazku. powiadomienie o alertach
Zrobiłem aplikację, która wyśle powiadomienie na Twój telefon z Androidem, gdy proces się zakończy, więc nie musisz być przywiązany do komputera.
Zainstaluj, a następnie dodaj ;notifier.sh
na końcu polecenia.
Na przykład, jeśli twoje polecenie było make install
, wydasz polecenie:
make install; notifier.sh
fg;say "Job finished"
to zadziała. Ale ... czy jest jakiś sposób, aby można go jeszcze zautomatyzować - np. Zadzwonić lub powiadomić po zakończeniu każdego zadania, które zajmuje więcej niż próg, jak minuta? Czy istnieje zmienna powłoki, np. W bash, która upłynęła od ostatniego polecenia?