0 votos

Diálogo Applescript, alias/función Bash

Estoy tratando de crear un alias corto para crear diálogos del Sistema desde la Terminal. Traté de crear una función Bash (ya que un alias no parece tomar argumentos) y añadirlo a mi .bash_profile, pero me falla.

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 del Terminal, obtengo

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

Aunque el eco de la CMD me da un comando con el formato adecuado:

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 hay una forma más fácil de conseguirlo. Todo lo que estoy tratando de hacer es crear un comando fácil de ejecutar que muestre diálogos.

EDIT: El intento alternativo tampoco condujo a nada. Este funciona para los argumentos sin espacios, pero falla para los argumentos múltiples.

sysdialog() {
    osascript -e "tell app \"system events\" to activate" -e "tell app \"system events\" to display dialog \"$@\""
}

1voto

Fuzzy Purple Monkey Puntos 702

Puedes usar el manejador 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' ), cambiar $1 a $* .

System Events se cierra automáticamente cuando no se utiliza, y hay un pequeño retraso cuando se abre, por lo que decirle que muestre el diálogo a veces sería más lento.

Sin el bloque try se produciría un error si el usuario pulsa un botón de cancelación. Sin activate la ventana previamente enfocada no recuperaría el foco cuando se cerrara el diálogo.

Puede utilizar algo así 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

0voto

Danijel J Puntos 2565

Prueba 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
  }

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