8 votos

Cómo puedo ejecutar un script de shell que solicita usuario desde dentro de Applescript

Tengo dos piezas de código. Uno es de Applescript y el otro un Bash script de shell. La secuencia de comandos de shell necesita para funcionar simultáneamente con el applescript, retorno de algunos de los valores de y, a continuación, salir. El problema es el del guión de shell read -p de símbolo de sistema no hace una pausa para la entrada del usuario cuando se llama desde dentro usando applescript 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 sustituir a la read -p de símbolo de sistema, pero no puedo averiguar cómo hacer que cualquier forma de trabajo. Cómo cam utilizar cualquiera de estos métodos para correctamente la pregunta y espera la entrada de usuario?

Me doy cuenta de que podría cortar el applescript en dos secciones colocando uno al comienzo de la secuencia de comandos de shell y uno después de que el último comando de la 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 que hace el trabajo. Pero requiere el uso de la terminal que está bien para mí. Pero si yo quería mostrar a alguien como mi Mamá ... ella simplemente no va a abrir la aplicación Terminal. Así que sería bueno encontrar una manera de emular la read -p comando dentro de Applescript sí mismo y ser capaz de pasar una variable a lo largo de la incrustados secuencia de comandos de shell.

12voto

Elegant Coder Puntos 123

En un script de AppleScript es a menudo desordenado, difícil de leer y difícil de citar correctamente.

Obtener alrededor de eso mediante el uso de 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

5voto

Agzam Puntos 212

Yo creo que lo que necesitamos es:

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

Si usted desea hacer esto desde un script de bash, lo que usted necesita hacer:

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

Me puede explicar en más detalle si me necesitas, pero creo que es bastante auto-explicativo.

EDIT: Si desea que el resultado como una variable de shell, hacer:

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 comillas simples inclinadas (` `) se evalúa (ejecutado) por el shell antes de comando principal. Ver esta respuesta para obtener más información.

Estoy de acuerdo en que esto es un poco "chapucero", y estoy seguro de que hay mejores maneras de hacer esto, pero esto funciona.

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