¿Cómo puedo ejecutar una secuencia de commands de shell que solicita la input de usuario desde Applescript

Tengo dos pedazos de código. Uno es Applescript y el otro un script de shell Bash. El script de shell necesita ejecutarse simultáneamente con el applescript, devolver algunos valores y luego salir. El problema es que el command de lectura do shell script "/path/to/script.sh" detiene para la input del usuario cuando se llama desde applescript usando el do shell script "/path/to/script.sh" .

Pensé que tal vez

  • Gotita con una barra de progreso?
  • Ejecutar un AppleScript que requiere pulsaciones de teclas mientras la pantalla está bloqueada?
  • AppleScript / automatizar tareas de correo
  • AppleScript - La export de páginas a PDF falla debido a los permissions de Sandbox
  • Mavericks - Tell aplicación "Vista previa" open PDF - extraño problema de permiso
  • Cómo montar y nombrar un volumen si aún no está montado con un script de inicio
  •  display dialog "Query?" default answer "" set T to text returned of result 

    podría replace el prompt de read -p pero no puedo averiguar cómo hacer que el trabajo de cualquier manera. ¿Cómo cam utiliza cualquiera de estos methods para pedir y esperar a la input del usuario correctamente?

    Me doy count de que podría cortar el applescript en dos secciones colocando uno al principio del script de shell y otro después del último command 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 #! / bin / bash #!/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 de la terminal que está bien para mí. Pero si yo quería mostrar a alguien como mi mamá … bueno, ella 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 ser capaz de pasar una variable a lo largo de la secuencia de commands incrustada shell.

  • ¿Existe una utilidad de command-line para mostrar una cadena o una image en la barra de estado en Mavericks?
  • Hacer ls command orderar por tipo de file (por ejemplo, directorys y extensión de file)
  • Bash o Zsh, ¿cuál es la diferencia, por qué usar uno o el otro?
  • Cómo deshabilitar el acceso directo para una secuencia de commands de Automator?
  • Establecer un atajo de keyboard para borrar todas las pistas de la queue Siguiente en iTunes
  • ¿Por qué el terminal de OS X necesita una fuente manual para mostrar el color?
  • 2 Solutions collect form web for “¿Cómo puedo ejecutar una secuencia de commands de shell que solicita la input de usuario desde Applescript”

    AppleScript embedded en una secuencia de commands de shell es a menudo desorderado, difícil de leer y difícil de citar correctamente.

    Me doy la vuelta 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 desea hacer esto desde un script bash, debe hacer lo siguiente:

     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 autoexplicativo.

    EDIT: Si desea que el resultado sea una variable de shell, haga lo siguiente:

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

    Todo lo que escribe 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 maneras de hacer esto, pero esto funciona.

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