¿Cómo puedo ejecutar un script de shell que solicita la entrada del usuario desde Applescript

5

Tengo dos piezas de código. Uno es Applescript y el otro un script de shell Bash. El script de shell debe ejecutarse simultáneamente con el script de manzana, devolver algunos valores y luego salir. El problema es que el indicador read -p de la secuencia de comandos de shell no se detiene para que el usuario ingrese información cuando se llama desde applecript usando do shell script "/path/to/script.sh" .

Pensé que tal vez

display dialog "Query?" default answer ""
set T to text returned of result

podría reemplazar el indicador read -p pero no puedo encontrar la manera de hacer que ambas formas funcionen. ¿Cómo puedo usar cualquiera de estos métodos para preguntar y esperar correctamente la entrada del usuario?

Me doy cuenta de que podría cortar el Applecript en dos secciones colocando una al principio de la secuencia de comandos de shell y una después del último comando de shell.

#!/bin/bash

osascript ~/Start_Script.scpt

echo 'enter some Text'
read -p "" T

## for things in stuff do more 
## stuff while doing other things
## done 

osascript ~/End_Script.scpt

Esto es lo que he estado haciendo y funciona. Pero requiere el uso del terminal que está bien para mí. Pero si quisiera mostrarle a alguien como mi mamá ... bueno, ella simplemente no va a abrir la aplicación Terminal. Por lo tanto, sería bueno encontrar una manera de emular el comando read -p dentro de Applescript y poder pasar una variable al script de shell incrustado.

    
pregunta I0_ol 27.05.2016 - 10:49

2 respuestas

3

AppleScript incrustado en un script de shell suele ser complicado, difícil de leer y difícil de citar correctamente.

Evito eso usando este tipo de construcción.

#!/usr/bin/env bash

read -r -d '' applescriptCode <<'EOF'
   set dialogText to text returned of (display dialog "Query?" default answer "")
   return dialogText
EOF

dialogText=$(osascript -e "$applescriptCode");

echo $dialogText;

-ccs

    
respondido por el Christopher Stone 01.06.2016 - 05:04
3

Creo que lo que necesitas es:

set T to text returned of (display dialog "Query?" buttons {"Cancel", "OK"} default button "OK" default answer "")

Si desea hacer esto desde un script de bash, debe hacerlo:

osascript -e 'set T to text returned of (display dialog "Query?" buttons {"Cancel", "OK"} default button "OK" default answer "")'

Puedo explicarlo con más detalle si me necesitas, pero creo que es bastante explícito.

EDITAR: Si desea el resultado como una variable de shell, haga:

SHELL_VAR='osascript -e 'set T to text returned of (display dialog "Query?" buttons {"Cancel", "OK"} default button "OK" default answer "")''

Todo lo que escriba entre las comillas invertidas ('') es evaluado (ejecutado) por el shell antes del comando principal. Consulte esta respuesta para obtener más información.

Estoy de acuerdo en que esto es un poco "hacky", y estoy seguro de que hay mejores formas de hacerlo, pero esto funciona.

    
respondido por el gunner 27.05.2016 - 13:41

Lea otras preguntas en las etiquetas