Me encantaría poder aprovechar las funciones del Centro de notificaciones de 10.8 en AppleScripts y scripts de shell que escribo.
¿Hay un comando incorporado o una biblioteca de terceros que pueda usar desde un AppleScript o un script de shell?
Idealmente, se podría controlar el tipo y el ícono de la notificación, pero incluso se agradecería la capacidad de activar un banner básico con un ícono de acciones (pero con texto personalizado).
Con Mavericks y posteriores, puede hacer esto usando la 'notificación de visualización' de AppleScript:
display notification "Lorem ipsum dolor sit amet" with title "Title"
Eso es, ¡literalmente así de simple! No se requieren bibliotecas o aplicaciones de terceros y es completamente portátil para usar en otros sistemas. Notificación 10.9 en la parte superior, 10.10 DP en el medio, 10.10 en la parte inferior.
AppleScript se puede ejecutar desde el shell usando /usr/bin/osascript:
osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
También puede personalizar aún más la alerta agregando...
un subtitulo
Agregue 'subtítulo' seguido de la cadena o variable que contiene el subtítulo.
display notification "message" with title "title" subtitle "subtitle"
El ejemplo anterior produce la siguiente notificación:
sonar
Agregue 'nombre de sonido' seguido del nombre de un sonido que se reproducirá junto con la notificación.
display notification "message" sound name "Sound Name"
Los nombres de sonido válidos son los nombres de los sonidos ubicados en...
~/Library/Sounds
/System/Library/Sounds
Las notificaciones de publicación se pueden envolver como un script de línea de comandos. El siguiente código se puede ejecutar en Terminal y agregará un script a /usr/local/bin (debe existir, agregar a $PATH) llamado notify
.
cd /usr/local/bin && echo -e "#!/bin/bash\n/usr/bin/osascript -e \"display notification \\\"\$*\\\"\"" > notify && chmod +x notify;cd -
Este es el script que agregará lo anterior para notificar.
#!/bin/bash
/usr/bin/osascript -e "display notification \"$*\""
Ahora para mostrar una notificación:
notify Lorem ipsum dolor sit amet
sleep 5; notify Slow command finished
display
? Tengo Mavericks pero no puedo ver para encontrarlo. ¡Gracias!-bash: display: command not found
Mi camino es un poco complicado, por lo que sería bueno saber exactamente dónde display
se encuentra.display notification
es que cuando hace clic en él, aparece el cuadro de diálogo Abrir archivo."display ... '$mytext' ..."
, pero necesita comillas dobles con escape: "display notification \"$mytext\" ..."
.display notification
no funciona para mí en El Capitan, aunque display alert
funciona bien. La documentación afirma que ambos funcionan. ¿Alguna idea de esto?sound name
ya no te permite reproducir sonidos personalizados ~/Library/Sounds
. ¿Alguien sabe una solución? Usando macOS 10.13.2.zsh: command not found: display
Del LÉAME:
terminal-notifier es una herramienta de línea de comandos para enviar notificaciones de usuario de Mac OS X, que están disponibles en Mac OS X 10.8.
Actualmente está empaquetado como un paquete de aplicaciones, porque
NSUserNotification
no funciona desde una 'herramienta de base'. radar://11956694Kicker utilizará esta herramienta para mostrar el estado de los comandos que se ejecutan debido a cambios en el sistema de archivos. (v3.0.0)
Descargar
Los binarios preconstruidos, que están firmados con código y listos para usar, están disponibles en la sección de descargas .
Uso
$ ./terminal-notifier.app/Contents/MacOS/terminal-notifier group-ID sender-name message [bundle-ID]
Para usar el notificador de terminal, debe llamar al binario dentro del paquete de la aplicación.
El primer argumento especifica el 'grupo' al que pertenece una notificación. Para cualquier 'grupo', solo se mostrará una notificación, reemplazando las notificaciones publicadas anteriormente. Algunos ejemplos son: el ID del proceso del remitente para definir el alcance de las notificaciones por un proceso único, o el directorio de trabajo actual para determinar el alcance de las notificaciones por un proyecto.
Los argumentos segundo y tercero describen la notificación en sí y son su 'título' y 'mensaje' respectivamente. Por ejemplo, para comunicar el remitente de una notificación al usuario, puede especificar el nombre del remitente como título.
El cuarto y último argumento es opcional. Especifica qué aplicación debe activarse cuando el usuario hace clic en la notificación. De manera predeterminada, esto activará Terminal.app, para iniciar otra aplicación en su lugar, especifique el identificador del paquete de la aplicación. Por ejemplo, para iniciar Safari.app use:
com.apple.Safari
.
sh: terminal-notifier: command not found
brew
directorio bin en la variable `$PATH? Por defecto no...Solo quiero agregar una nota a la respuesta de @grgarside, porque sé que muchas personas quieren tener una ventana emergente de notificación que solo se puede descartar haciendo clic en un botón.
He encontrado la solución para ti:
En realidad, estaba controlado por una configuración en Preferencias del sistema, en lugar de algún parámetro en el script escrito. Estas dos imágenes deberían explicarlo todo.
Gracias @grgarside por la gran respuesta.
Script Editor
es solo para Script Editor.app
y osascript
. En un flujo de trabajo de servicio, es Automator Runner
. Cuando está adentro Automator.app
, es Automator
.osascript
comando de repente no funcionaba, ni en iTerm ni en Terminal, hasta que fui a la configuración de Notificaciones para el Editor de secuencias de comandos y lo cambié de "Ninguno" a "Banners"!display notification
programa funcionara correctamente; a veces funcionaba, otras veces simplemente estaba en silencio. Después de meses de este comportamiento frustrante, finalmente descubrí que era causado por No molestar , que había programado para activarse después de las 8:00 p. m. 🤦♂️Ahora puede hacer esto con Growl2 ( disponible en la App Store ). Instale Growl y habilite las "Notificaciones de OS X" (captura de pantalla)
Además, deberá instalar GrowlNotify para que una herramienta de línea de comandos envíe notificaciones de Growl. Puede descargar esta herramienta de forma gratuita en la página de descargas .
Ahora puede generar notificaciones de Growl desde la línea de comandos, que se reenviarán al Centro de notificaciones. Por ejemplo:
growlnotify -n "My App" -m "Hello world"
Tenga en cuenta que actualmente no parece posible cambiar el icono de la aplicación.
--icon path/to/icon.png
para íconos.Recientemente bifurqué terminal-notifier para crear una herramienta de línea de comandos para mostrar alertas de notificación (con acciones) y alertas de tipo de respuesta.
Lo uso con mis scripts de shell y aplicaciones golang para obtener respuestas interactivas de los usuarios.
La solución de @grgarside es buena, pero es vulnerable a la inyección de secuencias de comandos, lo que puede ser un problema de seguridad importante cuando se usa, por ejemplo, para mostrar el contenido del archivo de registro o algo similar.
Esto debería ser más seguro:
#!/bin/bash
X="$*" /usr/bin/osascript -e 'display notification system attribute "X"'
I have a "laser"
"citar" sus "palabras" sin que le digan que tiene un error de sintaxis. Con escapar, puede:script 'I have a "laser"'
(Esta es una implementación alternativa basada en la excelente respuesta de @grgarside).
AppleScript se puede interpretar directamente colocando osascript
la línea shebang.
#!/usr/bin/osascript
on run argv
if length of argv = 1 then
display notification (item 1 of argv) with title "Notification"
else if length of argv > 1 then
display notification (item 1 of argv) with title (item 2 of argv)
else
return "<message> is required\nUsage: notify <message> [<title>]"
end if
end run
Guárdelo notify
en algún lugar de su ruta, por ejemplo, /usr/local/bin/notify
y hágalo ejecutable ( chmod +x notify
). Acepta un mensaje y un título opcional. Si alguno tiene espacios en blanco, envuélvalo entre comillas para que el shell lo interprete como un solo argumento.
$ notify "Lorem ipsum dolor sit amet" "Testing Notifications"
Como Growl no es gratuito y terminal-notifier no está disponible en sistemas anteriores a 10.8, tiendo a usar cocoaDialog . Es gratuito y de código abierto, por lo que probablemente también pueda distribuirlo junto con sus scripts.
Si no necesita mucha personalización, también puede usar AppleScript, display notification
que también puede llamar desde el shell, como ya han mencionado otros.
Pero tenga en cuenta que AppleScript parece requerir comillas dobles. Entonces, si necesita variables, esto no funcionará :
osascript -e "display notification '$text' with title '$title'" #WRONG
Tendrá que usar comillas dobles escapadas. Esto es feo pero funciona :
osascript -e "display notification \"$text\" with title \"$title\""
osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
Aquí hay uno genial que uso en un script Ruby en OS X (para que pueda iniciar un script y obtener una actualización incluso después de salir de la ventana):
cmd = %Q|osascript -e 'display notification "Server was reset" with title "Posted Update"'|
system ( cmd )
en .bash_profile
:
function _sys_notify() {
local notification_command="display notification \"$2\" with title \"$1\""
osascript -e "$notification_command"
}
alias sys-notify="_sys_notify $1 $2"
Usar comando:sys-notify "title" "message"
Documentación oficial
Copiando el texto aquí, en caso de que el documento sea movido o eliminado.
Para mostrar una notificación, proporcione el comando de notificación de visualización con una cadena para mostrar. Opcionalmente, proporcione valores para los parámetros con título, subtítulo y nombre de sonido para proporcionar información adicional y una alerta audible cuando aparezca la notificación.
display notification "All graphics have been converted." with title "My Graphic Processing Script" subtitle "Processing is complete." sound name "Frog"
NOTA
Después de usar una secuencia de comandos para mostrar una notificación, la secuencia de comandos o el Editor de secuencias de comandos (si la secuencia de comandos se ejecuta desde el Editor de secuencias de comandos) se agrega a la lista de aplicaciones de notificación en Preferencias del sistema > Notificaciones. Allí, puede configurar opciones, como mostrar las notificaciones como alertas o pancartas.
Al hacer clic en el botón Mostrar en una notificación de estilo de alerta, se abre la aplicación que muestra la notificación. Para una aplicación de secuencia de comandos, la acción de volver a abrir la aplicación activa el controlador de ejecución de la secuencia de comandos, lo que puede causar que la secuencia de comandos comience a procesarse por segunda vez. Tenga esto en cuenta y agregue código a su secuencia de comandos para manejar este escenario, si corresponde.
Gracias, esto era justo lo que necesitaba para algunos scripts de usuario. Hice una ligera modificación para agregar un subtítulo y sonido. Si no se proporciona un valor, se ignora.
function _sys_notify() {
local notification_command="display notification \"$2\" with title \"$1\" subtitle \"$3\" sound name \"$4\""
osascript -e "$notification_command"
}
alias sys-notify="_sys_notify $1 $2 $3 $4"
Para el sonido, use un nombre de archivo de sonido sin la extensión de /System/Library/Sounds. Por ejemplo, para usar el archivo Ping.aiff, use Ping por $4
Si desea notificaciones adhesivas (el comentario de Vic Jang parece que ya no funciona, al menos en Big Sur), aquí hay una forma de usar el diálogo en lugar de la notificación:
osascript -e 'display dialog "Lorem ipsum dolor sit amet" with title "Title"'
Entonces podría hacer uno display notification
y luego seguirlo con el diálogo.
También alerter hace pegajoso.
$ brew install alerter
$ alerter -message "hi"
dialog
bloquee su terminal ejecutando en 'fondo':osascript -e 'display dialog "Lorem ipsum dolor sit amet" with title "Title"' &
Palmadita