¿Cómo puedo ejecutar un script de shell que solicite la input del usuario desde Applescript?

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 AppleScript, devolver algunos valores y luego salir. El problema es que el post de read -p del script de shell no se pausa para la input del usuario cuando se lo llama desde applescript usando la 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 replace el post de read -p pero no puedo entender cómo hacer que funcione de alguna manera. ¿Cómo utiliza la leva cualquiera de estos methods para preguntar correctamente y esperar la input del usuario?

Me doy count de que podría cortar el manuscrito en dos secciones colocando uno al comienzo del guión de la concha y uno después del último command de la concha.

 #!/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 usar el terminal, lo cual está bien para mí. Pero si quisiera mostrarle a alguien como mi mamá … bueno, simplemente no va a abrir la aplicación Terminal. Por lo tanto, sería bueno encontrar una forma de emular el command read -p dentro de Applescript y poder pasar una variable junto con el script de shell embedded.

  • Cómo invocar un script al cerrar cualquier file con una extensión dada
  • Cómo pasar un set de files como una variable de AppleScript a un script de shell Bash
  • La manipulación de cadenas de shell no funciona en Applescript
  • Intentando eliminar los files listdos en el file con AppleScript con una llamada de script shell
  • Applescript que responde a las pulsaciones de teclas?
  • 2 Solutions collect form web for “¿Cómo puedo ejecutar un script de shell que solicite la input del usuario desde Applescript?”

    AppleScript embedded en un script de shell a menudo es complicado, difícil de leer y difícil de citar correctamente.

    Lo soluciono usando este tipo de constructo.

     #!/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

    Creo que lo que necesitas es:

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

    Si quieres hacer esto desde un script bash, necesitas hacer:

     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 lo necesitas, pero creo que es bastante auto explicativo.

    EDITAR: Si quieres el resultado como una variable de shell, hazlo:

     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 los backticks (“) es evaluado (ejecutado) por el shell antes del command principal. Vea esta respuesta para más información.

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

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).