Сповіщення про врізання для виконання завдань оболонки


12

(Специфічний для OSX)

Я, як і багато інших, окрім себе, часто виявляю, що я починаю процес в оболонці, який займає хвилину чи дві (наприклад, велика фіксація svn). За цей час я часто вкладаю Alt-tab і оновлюю reddit / slashdot / wikipedia / що завгодно. Було б чудово налаштувати щось, що надсилатиме повідомлення про гарчання, коли процес оболонки закінчиться.

У моєму ідеальному світі це спрацювало б так: "Якщо процес тільки що вийшов із вкладки, відкритої у Терміналі, опублікуйте повідомлення про гарчання".

Хтось ще має щось подібне налаштувати?


1
Зауважте, що гарчання повідомить про вас, лише якщо ви все ще сидите біля екрана. Для більш тривалих програм використовуйте команду "сказати", щоб отримати звуковий підказку, що вона закінчена.

@mankoff: Ви можете налаштувати параметри growlnotifyсповіщень програми, Growl.prefPaneщоб вони включали звук сповіщень. Однак це не змінюється залежно від команди, яку ви виконуєте, як sayби це було. Але це менш моторошно.
Даніель Бек

Відповіді:


11

Для цього можна встановити вільно повідомляти.

$ ./some_program && growlnotify Title -m Message

Звичайно, вам потрібно було б подумати над цим, перш ніж виконувати свою команду. Альтернативою (я не знаю, як цього досягти) було б повідомлення Growl для кожної окремої команди, що було б шалено дратувати.


Щоб спростити використання функцій зростання, відредагуйте ~/bash_profileта додайте наступне:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

тепер ви можете просто long your_command(схоже на sudo). Ctrl-Aпозиціонує курсор на початку рядка, якщо ви (як і я) завжди спочатку набираєте фактичну команду і після цього потрібно додати префікс.

На жаль, мого баш-фу недостатньо, щоб можна було додати команду до growlnotifyповідомлення


коментар per @ mankoff до цієї відповіді:

Ви можете просто набрати під час виконання команди, після чого вона буде виконуватися. Я створив для мене таку функцію:

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

Використовувати як gn svn.


2
Вам не потрібно думати про це перед командою. Якщо під час запуску ви зрозумієте, що хочете отримувати сповіщення, коли це зроблено, просто введіть "gn foo" (або "скажіть, зроблено", для аудіо-підказки), натисніть клавішу enter, і ця команда запуститься, коли поточна завершиться .

Чи коментуєте ви це робити автоматично ... Використовуйте PS1 або щось, щоб торкнутися часової позначки. Використовуйте PS2, щоб перевірити, як довго PS1 торкнувся його. Якщо минуло> n секунд, запустіть функцію grolnotify. Тепер це не дратує, оскільки це відбувається не для кожної команди.

@mankoff True. Тож достатньо простої функції зменшити набір тексту.
Даніель Бек

@mankoff PS2? Це не просто запит на продовження? Це не префікс кожного вихідного рядка ..?
Даніель Бек

PS1 / PS2 - це лише здогадки, як місця, я б почав шукати, чи хочу це здійснити. Можливо, всю річ можна вбудувати лише в PS1. І, можливо, існують абсолютно різні способи зробити загальну настройку для кожного командування.

2

Вам потрібна growlnotifyпрограма CLI для запуску бурхливих сповіщень. Ви можете використовувати його як:

./script.sh;; growlnotify -m "done"

У нього є ще кілька ручок, з якими можна грати, і використовувати growlnotify -hдля отримання додаткової інформації


Спасибі. Я просто прокоментував той самий час, коли теж виявив це. Точка з комою має більше сенсу, ніж && також.
ezrock

1
@ezrock Я думаю, що можна використовувати &&і ||мати різні повідомлення між станами успіху та відмови, але якщо хтось зацікавлений у тому, щоб повідомлення відображалося після виконання команди, то ;;це неправдиво. =)
roguesys

2

Змінення відповіді Деніела Бека, якщо ви зробите цю невелику зміну, це робить це дуже приємно.

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

Потім, коли ви запустите "довгий svn up", ви побачите повідомлення "svn up завершено".

Дуже приємно, якщо ви одночасно запускаєте багато трудомістких сценаріїв оболонок.


2

Тепер, коли OSX 10.8 і пізніших версій має сповіщення, ось як я досягнув тієї самої мети через термінал-сповіщувач :

  1. Встановіть варити
  2. $ brew install terminal-notifier
  3. Додайте це до ~/.bash_profile:

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }

Переконайтеся, що ви створили свій профіль . ~/.bash_profile(не потрібен для майбутніх термінальних сесій), оскільки ваш профіль автоматично створюється під час створення сеансу.

Перевірте свою улюблену команду з подальшим викликом функції.

ls ; gn

Аргументи термінальному сповіщувачу можуть трохи покращитись, але швидка спроба схопити попередню команду для переходу до функції виявилася невдалою, і це отримує мені всю необхідну мені функціональність. А саме, додавання ;gnдля отримання повідомлення в кінці будь-якого тривалого процесу.



1

Це спосіб автоматичного виклику для "тривалих" процесів: http://hints.macworld.com/article.php?story=20071009124425468

Він підключається до $PROMPT_COMMANDта повідомляє про завершення процесів, що тривають більше 10 секунд. Можливо, вам доведеться налаштувати його відповідно до вашого власного оточення та робочого процесу (наприклад, ігнорування завершення lessабо виклику редактора), але, здається, він працює досить добре.


Я сам не пробував цього, але повністю автоматизований підхід звучить дуже привабливо. Всі інші рішення тут вимагають заздалегідь знати, що команда буде тривалою і запам'ятовує, щоб запустити скрипт (наприклад, ls; нараховувати). Мені подобається ідея не потрібно її вручну запускати.
ezrock

0

Я просто роздумував ще дещо і знайшов для цього простий метод. Це трохи більше посібника, ніж я хотів би бути, але ось що.

  1. Встановіть нарахування (це в папці "Додатки" для завантаження установки Growl) 1.
  2. Додайте < && growlnotify -m "Message"> до тривалого процесу.

Це працює для мене зараз, але я міг би зробити краще, міркуючи.


0

Рішення для OSX 10.9+ без стороннього програмного забезпечення:

В OSX 10.9 і вище, ви можете використовувати команду AppleScript display notificationдля відображення бурчання з терміналу так:

osascript -e 'display notification with title "Process Completed."'

Якщо ви не хочете вводити все це кожен раз, ви можете використовувати alias:

alias growl='osascript -e "display notification with title \"Process Completed.\""'

Приклад:

long-running-script.sh; growl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.