¿Cómo hago una ventana emergente / alerta de Terminal Mac? Applescript?


107

Quiero que mi programa muestre una alerta, un aviso, lo que sea que muestre mi texto personalizado. ¿Cómo se hace esto? Además, ¿es posible hacer uno con varios botones que establezca una variable?

Similar a los lotes: echo msgbox""<a.vbs&a.vbs

Respuestas:


213

Utilice osascript. Por ejemplo:

osascript -e 'tell app "Finder" to display dialog "Hello World"' 

Reemplazo de "Finder" con cualquier aplicación que desee. Tenga en cuenta que si esa aplicación está en segundo plano, el cuadro de diálogo también aparecerá en segundo plano. Para mostrar siempre en primer plano, use "Eventos del sistema" como aplicación:

osascript -e 'tell app "System Events" to display dialog "Hello World"'

Leer más en Mac OS X Hints .


Espera, ¿puedes abreviar aplicación como aplicación?
JShoe

El motor AppleScript lo reemplazará automáticamente. Simplemente pegue la línea entre las comillas en AppleScript Editor, cuando presione Ejecutar, reemplaza la aplicación automáticamente con la aplicación antes de la ejecución.
Anne

Otro ahorro de escritura: no necesita "finalizar si", "finalizar repetición", etc., simplemente "finalizar" está bien y AppleScript insertará la segunda palabra.
Nicholas Riley

7
Si no desea el botón "Cancelar" pero solo desea un botón "Aceptar", reemplace {diálogo} por {alerta}.
Bart B

1
13havik, bueno, sé que es un tema antiguo, pero sí, puedes. :) Sin embargo, debe iniciar sesión. Por ejemplo, mediante la terminal ssh. y luego invocar osascript -e 'mostrar el diálogo "¡Hola!"'
Alex Reds

61

Utilice este comando para activar la notificación del centro de notificaciones desde el terminal.

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

61

Si está usando cualquier versión de Mac OS X que tenga el Centro de notificaciones, puede usar la gema de notificador de terminal . Primero instálelo (puede que lo necesite sudo):

gem install terminal-notifier

y luego simplemente:

terminal-notifier -message "Hello, this is my message" -title "Message Title"

Ver también este post OS X Daily .


5
Esto es simplemente mucho mejor que el antiguo osascript.
Jonny

Esto parece no funcionar en 10.7.5 (Lion), aparentemente no hay Centro de notificaciones en él.
Norman H

4
brew install terminal-notifiertambién funciona si prefieres prepararla.
gklka

5
PSA: en Mavericks y posteriores, esto no es necesario, solo use la notificación de pantalla de osascript , que se menciona a continuación en la respuesta de Pradeep.
alexchandel

7

Esto restauraría el foco a la aplicación anterior y saldría del script si la respuesta estuviera vacía.

a=$(osascript -e 'try
tell app "SystemUIServer"
set answer to text returned of (display dialog "" default answer "")
end
end
activate app (path to frontmost application as text)
answer' | tr '\r' ' ')
[[ -z "$a" ]] && exit

Si le dijo a System Events que mostrara el diálogo, habría un pequeño retraso si no se estaba ejecutando antes.

Para obtener documentación sobre el cuadro de diálogo de visualización, abra el diccionario de adiciones estándar en AppleScript Editor o consulte la Guía del lenguaje AppleScript .


4

Agregar subtítulo , título y un sonido a la notificación:

Con AppleScript :

display notification "Notification text" with title "Notification Title" subtitle "Notification sub-title" sound name "Submarine"

Con terminal / bash y osascript:

osascript -e 'display notification "Notification text" with title "Notification Title" subtitle "Notification sub-title" sound name "Submarine"'

Se puede mostrar una alerta en lugar de una notificación

No toma el subtítulo ni el sonido duro.

Con AppleScript :

display alert "Alert title" message "Your message text line here."

Con terminal / bash y osascript:

osascript -e 'display alert "Alert title" message "Your message text line here."'

Agregue una línea en bash para reproducir el sonido después de la línea de alerta:

afplay /System/Library/Sounds/Hero.aiff

Agregue la misma línea en AppleScript , dejando que el script de shell haga el trabajo:

do shell script ("afplay /System/Library/Sounds/Hero.aiff")

Lista de sonidos integrados de macOS para elegir aquí .

Parafraseado de un artículo útil sobre notificaciones de terminal y manzanas .


3

Y mis 15 centavos. Una línea para el terminal mac, etc.simplemente configure MIN = a lo que sea y un mensaje

MIN=15 && for i in $(seq $(($MIN*60)) -1 1); do echo "$i, "; sleep 1; done; echo -e "\n\nMac Finder should show a popup" afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Look away. Rest your eyes"'

Un ejemplo adicional de inspiración para combinar más comandos; esto pondrá un mac en modo de suspensión en espera sobre el mensaje también :) el inicio de sesión de sudo es necesario entonces, una multiplicación como el 60 * 2 por dos horas también va

sudo su
clear; echo "\n\nPreparing for a sleep when timers done \n"; MIN=60*2 && for i in $(seq $(($MIN*60)) -1 1); do printf "\r%02d:%02d:%02d" $((i/3600)) $(( (i/60)%60)) $((i%60)); sleep 1; done; echo "\n\n Time to sleep  zzZZ";  afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Time to sleep zzZZ"'; shutdown -h +1 -s


0

Hice un guión para solucionar esto que está aquí . No necesita ningún software adicional para esto. Instalación:
brew install akashaggarwal7/tools/tsay
Uso:
sleep 5; tsay

¡Siéntete libre de contribuir!


9
"no necesita ningún software adicional ... simplemente instale este" es un software adicional.
PRS

@PRS es un script que ejecuta comandos disponibles para macOS, no un software.
Akash Agarwal

2
entonces, ¿por qué tengo que instalar brew y tu script? ¿Ves lo que quiero decir? ;)
PRS

sin embargo, le daré crédito por presentarme el comando say ... ¡Aprendí algo nuevo hoy! lol
PRS

@PRS Me alegro de que hayas encontrado el comando say, es bastante útil. Acerca de tu otro comentario, creo que si eres un desarrollador, es bastante común que lo uses. Y sobre la instalación del script, siéntase libre de abrir el código fuente del script y copiarlo / pegarlo localmente en un archivo y chmod + x y ejecutarlo;)
Akash Agarwal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.