¿Cómo hago para que el terminal iTerm me notifique cuando se completa un trabajo / proceso?

105

Una notificación del centro de notificaciones sería ideal, pero gruñido, muelle de rebote, sonido, etc. también estaría bien (o si esto solo se puede hacer en Terminal.app, estaría dispuesto a volver). ¿Hay alguna opción en iTerm para activar las notificaciones o es algo que se supone que debo escribir al final de un comando en la terminal? Si es lo último, ¿es posible agregar una alerta una vez que el proceso ha comenzado?

verdad
fuente

Respuestas:

197

Notificar sobre un proceso que ya se está ejecutando

Atajo: Ao:

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

¡Ojo espeluznante!: iTermliteralmente vigilará (en la esquina superior derecha) de su terminal. Una vez finalizado el comando, se pondrá en contacto con el Notification Center.

¿Por qué?

Ya lanzamos el comando. Subestimamos el tiempo necesario para completarlo, no queremos cancelarlo y nos negamos a sentarnos a verlo. por ejemplo, ¡ brew updatedespués de mucho tiempo!

Requisitos

iTerm: Integración de Shell:

iTerm2 -> Install Shell Integration

Tenga en cuenta que la integración no mostrará notificaciones hasta que se reinicie iTerm2.

Paschalis
fuente
11
Después de instalar las integraciones de shell, es posible que desee ir a iTerm2 -> Preferencias -> Perfiles -> Terminal, desplácese hacia abajo y desmarque "Mostrar indicadores de marca", no me gustó esta integración de shell. Es posible que también desee Editar -> Marcas y anotaciones -> Alertas -> Publicar notificación si desea las notificaciones del sistema operativo en lugar de una ventana emergente de estilo de alerta.
Charles L.
@simonhamp Sugiero usar activadores ( iterm2.com/documentation-triggers.html ) para sesiones enterradas
phirschybar
3
@dwanderson ¿Alguna vez consiguió que esto funcionara con tmux? Esto sería muy útil
Lucas
@Lucas hay una línea en los documentos que dice que la integración de shell no funciona con tmux o screen iterm2.com/documentation-shell-integration.html
Rich Stone
2
¡¡Este ojo me asusta !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Puede agregar cualquiera de los siguientes después de cualquier comando, con un punto y coma entre el comando y él:

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

osascript -e 'beep 3'

tput bel

o, si te gusta el Centro de notificaciones

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

También puede crear un alias en su perfil, llamarlo notifyy agregarlo al final de su comando. Entonces, en su perfil de inicio de sesión

alias notify="tput bel"

luego

sleep 10; notify

O, si inició su comando y está "colgado", simplemente escriba notifyy presione Entery ejecutará su notifyalias al final, cuando el comando haya terminado, por ejemplo

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
fuente
Hmm, con este comando osascript -e 'display notification "Task finished" with title "Terminal"'parece que recibo este error2015-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:
verdad
/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.
Segunda
¿Estás en un sistema más antiguo que Mavericks o Yosemite?
Mark Setchell
No, Yosemite 10.10.3
verdad
Oh, eso es extraño. ¿Puedes probar algo más simple como osascript -e 'display notification "Hello"', copiando y pegando específicamente desde aquí?
Mark Setchell
33

Y siempre puedes usar el saycomando.

Por lo general, cuando está ejecutando un proceso largo dentro de la terminal y desea actualizarse, simplemente puede usar este comando para decir cosas como doneo erroro bazinga.

mvn clean install; say done 

Este comando crea una aplicación java spring, lleva mucho tiempo y hablará una donevez que se complete el proceso.

Farhan Salam
fuente
16

iTerm2admite Growlnotificaciones. Puede activarlo en la configuración de cada perfil.

Seleccione un perfil en Preferences…-> Profiles. Luego, en la Terminalpestaña hay una opción Enable Growl Notifications.

Recuerde habilitar también las iTermnotificaciones en las Growlpreferencias.

Si desea recibir una notificación para un proceso determinado, puede intentar experimentar Triggers. Los desencadenadores se definen en la Advancedpestaña de una configuración de perfil. De esta manera, puede asignar una notificación de Growl a una salida particular de su proceso (regexp).

Por ejemplo, podría hacer:

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

Y conecte el disparador al mensaje "fin de mi proceso".

Actualizar

Lea más sobre los disparadores en iTerm2.com .

baf
fuente
Entonces, ¿estoy en lo cierto de que no hay una forma global de recibir una alerta para cualquier proceso terminado porque necesito haber ejecutado el script una vez para saber qué escribe al final del proceso (y tengo que crear uno para cada script que ejecuto? )? Por ejemplo, la última línea para un proceso youtube-dl es [download] 100% of 40.13MiB in 00:13pero esta línea se repite para cada archivo que finaliza. ¿Qué pondría en mi cadena de 'fin-de-mi-proceso'? ¿Puedo hacer un disparador para cuando ~ >vuelva a aparecer mi indicador de shell predeterminado ?
truth1ness
@ truth1ness No creo que haya una forma genérica de estar informado sobre el proceso terminado. iTermenvía notificaciones para una nueva salida de terminal, para el final de la salida de terminal. Esto puede funcionar para algunos procesos. La forma de trabajar para todos los procesos es lo que sugerí. El mensaje "fin-de-mi-proceso" puede ser cualquier cadena única. Único de tal manera que no será impreso por su proceso. Podría ser literalmente texto de "fin de mi proceso". Debe ingresar exactamente la misma cadena en la definición del disparador y adjuntarle una notificación. No sé si funcionará con el indicador de shell. Debes probarlo tú mismo.
baf
Ah, lo entendí mal, lo entendí ahora. Pude obtener una alerta emergente con la salida de eco "fin de mi proceso". Sin embargo, también recibo una alerta cuando en realidad emito el comando echo antes de que comience el proceso. ¿Cómo le diría a iTerm que ignore la cadena cuando en realidad emito el comando y solo miro la cadena con eco? Desde el archivo de ayuda, intenté anteponer la expresión regular del disparador con \ 0 ("El valor completo que coincide con la expresión regular"), pero todavía ejecuta el disparador dos veces.
truth1ness
@ truth1ness Sea creativo, por ejemplo, utilícelo echo "end-of-""my-process" con comillas adentro. Coincidirá con el texto "fin de mi proceso" sólo cuando el proceso haya terminado.
baf
9

Existe una herramienta de OSS llamada noti .

Puede instalarlo fácilmente brew install notiy comenzar a usarlo simplemente poniendo noticomo prefijo en su comando noti sleep 3.

junjian.xu
fuente
3

También puede utilizar terminal-notifierlas notificaciones del sistema mac os. Para instalarlo a través de Home brew solo:

$ brew install terminal-notifier

Luego, si desea mostrar una notificación cuando su trabajo / proceso haya terminado, use algo como esto

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

Y esta pantalla así:

ingrese la descripción de la imagen aquí

También puede cambiar el sonido y el icono de las notificaciones. Más información en el repositorio de github: https://github.com/julienXX/terminal-notifier

MaSza
fuente
1

Instale la integración del shell iTerm2

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

Ejecute su comando y concatene la aplicación de atención, por ejemplo

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

Hará que la aplicación iTerm rebote su ícono una vez que se complete el trabajo.

También tienes otras opciones de atención:

$ .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
fuente