Cuadro de diálogo Applescript, Bash alias / function

0

Estoy intentando crear un alias corto para crear diálogos del sistema desde la Terminal. Intenté crear una función Bash (ya que un alias no parecía tener argumentos) y agregarla a mi .bash_profile, pero me está fallando.

Mi último intento es:

dialog() {
    DIALOGVAR='tell app "system events" to display dialog "'$@'"'
    CMD="osascript -e 'tell app \"system events\" to activate' -e '$DIALOGVAR'"
    $CMD
}

Pero cuando lo ejecuto a través de la Terminal, obtengo

0:1: syntax error: A unknown token can’t go here. (-2740)

Aunque hacer eco en la variable CMD me da un comando con el formato correcto:

osascript -e 'tell app "system events" to activate' -e 'tell app "system events" to display dialog "foo bar"'

Quizás estoy haciendo algo mal, quizás haya una manera más fácil de lograrlo. Todo lo que estoy tratando de hacer es crear un comando fácil de ejecutar que muestre diálogos.

EDITAR: El intento alternativo tampoco llevó a nada. Éste funciona para argumentos sin espacios, pero falla para múltiples argumentos.

sysdialog() {
    osascript -e "tell app \"system events\" to activate" -e "tell app \"system events\" to display dialog \"$@\""
}
    
pregunta Joost 17.02.2013 - 13:37

2 respuestas

1

Puede usar el controlador de ejecución para pasar argumentos:

dialog() {
    osascript -e 'on run args
    try
    tell app "SystemUIServer" to display dialog (item 1 of args)
    end
    activate app (path to frontmost application as text)
    end' "$1"
}

Si quieres llamarlo como dialog a b (en lugar de dialog 'a b' ), cambia de $1 a $* .

Los eventos del sistema se cierran automáticamente cuando no se usa, y hay un pequeño retraso cuando se abre, por lo que pedirle que muestre el cuadro de diálogo a veces sería más lento.

Sin el bloque try, se producirá un error si el usuario presiona un botón de cancelación. Sin activate , la ventana enfocada previamente no volvería a enfocarse cuando se cierra el diálogo.

Puedes usar algo como esto para mostrar diálogos de texto:

answer=$(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 "$answer" ] && exit
    
respondido por el user495470 17.02.2013 - 16:47
0

Intenta esto;

#!/bin/bash
dialog() {
  DIALOGVAR=$('tell app "System Events" to display dialog "'$@'"')
  CMD=$("osascript -e 'tell application \"System Events\" to activate'"; "osascript -e '$DIALOGVAR'")
  $CMD
  }
    
respondido por el Danijel-James W 28.09.2013 - 19:02

Lea otras preguntas en las etiquetas