77 votos

Cómo recibir una notificación cuando mis comandos están terminados

Estoy ejecutando una serie de comandos en la línea de comandos que tarda aproximadamente veinte minutos en completarse. Me gustaría ver algún tipo de notificación en mi Mac cuando estos terminen para no tener que monitorear la terminal para cuando termine. ¿Hay alguna forma de hacerlo?

$ svn update . && ant clean build start && *notify_me_somehow*

Editar :

Podría usar xclock pero esto parece un truco. Lo ideal sería poder enviar la notificación a cualquier lugar, como mi teléfono, pantalla, etc.

69voto

SureshG Puntos 236

(svn update . && ant clean build start && say done) || say error

2 votos

Este es un magnífico ejemplo del uso de operadores de shell && para encadenar varios comandos y envolverlos con un || o declaración para que se produzca un error. +1 de hecho

2 votos

¡Bien! Sin embargo, para poder hacerlo rápidamente, dejé la información de error vs. éxito y añadí un alias global a mi zsh: alias -g sd='; say done' . Esto significa que sólo tengo que añadir sd a cualquier comando, y se me notificará.

0 votos

Muy bonito. Y ahora tengo algo con lo que jugar

65voto

Daniel Puntos 155

En Mac OS 10.8 y superior puedes enviarte a ti mismo mensajes del Centro de Notificaciones. Hay una herramienta llamada terminal-notifier que puede descargar o instalar usando Homebrew o Rubygems, por ejemplo:

brew install terminal-notifier

Comprueba https://github.com/julienXX/terminal-notifier para saber más sobre esta herramienta.

Para simplificar el caso de uso común de sólo preocuparse por el hecho de que se haga algo en la terminal, añada un alias a su .bash_profile :

alias notifyDone='terminal-notifier -title "Terminal" -message "Done with task! Exit status: $?"' -activate com.apple.Terminal

O, incorporando Respuesta de Austin Lucas puede añadir un sonido y un icono de insignia con tput bel :

alias notifyDone='tput bel; terminal-notifier -title "Terminal" -message "Done with task! Exit status: $?"' -activate com.apple.Terminal

Entonces puedes simplemente hacer:

$ <long-running task> ; notifyDone

Una vez que la tarea de larga duración termine, obtendrá una bonita ventana emergente modal:

Notification Center popup

Al hacer clic en la notificación, se activará el Terminal. Si vas a Preferencias del Sistema > Notificaciones > terminal-notificador y cambias el estilo de alerta a "Alertas", la notificación persistirá hasta que la descartes.

13 votos

terminal-notificador puede instalarse a través de homebrew También: brew install terminal-notifier . Entonces, sólo tienes que escribir myCommand && terminal-notifier -message 'finished' . Probado en OS X Yosemite (10.10.1).

6 votos

Debe ejecutar myCommand; terminal-notifier -message 'finished' de lo contrario, la notificación no se mostrará si myCommand no lo hace.

1 votos

¡Una solución impresionante! Por cierto, esto no produce ningún sonido como otras notificaciones de OS X. ¿Alguna solución para eso?

21voto

DLRdave Puntos 398

Utilice Gruñido .

En el .dmg busque los extras, hay un binario growlnotify. Instálalo, algo así como en /usr/local/bin . A continuación, puede utilizar este comando

growlnotify --sticky --appIcon <icon> --message <message> -t <title>

para mostrar una ventana emergente, así:

growl

3 votos

Yo uso casi este mismo enfoque pero extiendo Growl con Prowl para que Growl pueda enviar la notificación a mi iPhone.

3 votos

El Centro de Notificaciones de Mountain Lion hace que Growl sea innecesario... ver mi respuesta para saber cómo usarlo para esto.

20voto

Yasmine Mustafa Puntos 21

A partir de Mac OS X Lion 10.7, Terminal tiene algunos indicadores de estado nuevos para ayudar con problemas como éste:

En las pestañas:

  • Actividad: se muestra un indicador de actividad (indicador de progreso de giro) cuando ha habido una salida reciente al terminal. Esto le permite ver si está actualmente ocupado o si ha completado un proceso largo. (O, por supuesto, puede utilizarlo para saber cuándo ha empezado a producir salida después de haber realizado un trabajo en silencio durante un tiempo).

  • Sin leer: se muestra una elipsis " " para indicar el texto nuevo no leído en las pestañas de fondo. Al seleccionar la pestaña, el indicador se borra.

  • Alerta: se muestra una "campana" para indicar cuando se ha escrito un BEL en las pestañas de fondo o en las ventanas de fondo. Además, Terminal muestra una insignia roja en el icono de la aplicación, indicando el número de alertas/campanas "no leídas" en todos los terminales. Si el propio Terminal está en segundo plano, también hace rebotar su icono del Dock cuando se reproduce una campana.

En los iconos del Dock de la ventana minimizada:

  • Actividad: la actividad se indica mostrando el nombre del proceso en primer plano.

  • No leído: el texto no leído se indica con una elipsis.

  • Los terminales minimizados de Windows muestran contenido en vivo en sus iconos del Dock. Esto puede utilizarse para ver si hay actividad, o incluso para determinar qué está haciendo el terminal, si la salida que se busca es identificable (por ejemplo, una pantalla "superior" es bastante fácil de reconocer incluso en tamaños pequeños). Esto es especialmente útil cuando la ampliación del Dock está activada o tienes espacio para un Dock grande.

Además, podría mostrar algo en el terminal para llamar la atención (que sería visible incluso en Windows minimizado). Por ejemplo:

  • Muestra un asterisco grande: banner \*

  • Invierte la pantalla: printf '\e[?5h'

  • Pinta la pantalla de rojo: tput setab 1; tput clear

  • Se sienta en un bucle, parpadeando la pantalla: while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done

También hay códigos de escape para manipular las ventanas (mover, fijar el tamaño, hacer zoom, minimizar, etc.). Por ejemplo, puedes ampliar la ventana de la Terminal:

printf '\e[9;1t'

Ver "manipulación de ventanas" en http://invisible-island.net/xterm/ctlseqs/ctlseqs.html para más detalles.

Otro enfoque es utilizar AppleScript para mostrar una alerta en una ventana separada:

osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'

0 votos

Excelente uso de tput, y de las secuencias de escape: ¡lo tienes todo excepto un mensaje de desplazamiento en la barra de título!

19voto

JTew Puntos 1599

Sé que llego tarde a la pregunta pero creo que falta una pequeña pieza que puede ser útil. He comprobado que, aunque es bonito, que tu terminal hable contigo no es precisamente funcional. Lo mejor es algo más sutil como esto:

http://i.stack.imgur.com/FaZmF.png

Como ha señalado Chris, Lion ha añadido pequeñas insignias de notificación cuando se lanza un BEL. Puedes lanzarlo tú mismo esto con el comando:

tput bel

Así que, si estás haciendo algún trabajo en segundo plano y quieres una notificación cuando termine, puedes probar algo así:

ping -c 5 www.google.com && tput bel &

Esto ejecuta el comando ping como una tarea en segundo plano (el colgado & logra esto) y hace que lance una simple alerta cuando termina. Históricamente BEL se ha utilizado para hacer ese [horrible] pitido de hardware, sin embargo Lion ha reemplazado con buen gusto eso con el efecto de sonido de "comando inválido", una insignia de notificación, y el icono de la terminal rebotando dos veces en el dock.

1 votos

printf '\a' equivaldría a tput bel . Tenga en cuenta que Terminal no hace rebotar el icono del Dock si la pestaña que ha provocado la alerta está actualmente activa.

0 votos

Esto es bonito porque no requiere instalar ningún software adicional. iterm2 (y a juzgar por la captura de pantalla también Terminal) ya envía una notificación cuando suena el timbre y se minimiza la pantalla.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X