Cómo pasar un conjunto de archivos como una variable de AppleScript a un script de shell Bash

1

Tengo un problema de dos partes.

  1. Estoy tratando de pasar una variable de AppleScript para usarla como una variable dentro de un script de shell bash. No puedo averiguar cómo funciona este trabajo. He leído sobre la concatenación de la variable y el comando do shell script con & dentro de AppleScript. Pero eso realmente no funciona con un script más largo.

Aquí está el corto AppleScript para seleccionar un archivo y (con suerte) pasarlo al shell como una variable.

tell application "Finder"
    activate
    choose file
    set myFile to result as text
end tell
do shell script "/path/to/script.sh"

Y luego el script de shell en sí:

#!/bin/bash
while read lines
do
    echo ${lines##*:}
    grep "string" 
done <$myFile | awk '!x[$0]++' |\
trans -b :en # this is where the second problem occurs

Esta es una versión abreviada del script real, pero creo que la intención es clara. No estoy seguro de cómo pasar la variable myFile DE Applescript al shell.

  1. El segundo problema es que el comando trans ( que es un traductor de línea de comandos bastante práctico ) utiliza el comando gawk que, por supuesto, se instala junto con el programa trans . Pero cuando se ejecuta desde Applescript, aparece el mensaje de error:
  

error "/ usr / local / bin / trans: línea 4990: gawk: comando no encontrado" número 127

Sé que AppleScript necesita la ruta completa para que esto funcione. Pero, ¿cómo proporciono la ruta completa para un comando integrado dentro de casi 5000 líneas de código? ¿Altero el código del programa trans para proporcionar la ruta completa a gawk ?

También me doy cuenta de que podría hacer todo esto desde dentro del shell y que mucho de esto está agregando complejidad donde no se necesita. Pero creo que todavía vale la pena saber cómo hacerlo.

Gracias por leer.

    
pregunta I0_ol 21.06.2016 - 09:41

2 respuestas

1

El primer problema se puede resolver exportando la ruta dentro de la parte do shell script :

tell application "Finder"
    activate
    choose file
    set myFile to result as text
end tell
do shell script "export MYFILE=" & quoted form of myFile & " ; /Users/user_name/bin/sh/echo_var_myfile.sh"

En mi ejemplo, "echo_var_myfile.sh" es

#!/bin/bash
echo $MYFILE >> /Users/user_name/echo_var_myfile.txt

El bit ejecutable se debe establecer:

chmod +x /Users/user_name/bin/sh/echo_var_myfile.sh

El resultado es la ruta al archivo elegido.

No debe agregar un segundo do shell script para el script de shell porque, tan pronto como se ejecuta el primero, muere y no se exportan valores.

    
respondido por el klanomath 21.06.2016 - 12:57
1

El primer problema con el primer script es que no estás usando la variable set myFile .

Aquí hay una guía general para obtener ayuda:

Editor de secuencias de comandos abierto: use el menú de ayuda para iniciar la Guía del lenguaje AppleScript y busque el comando que tiene. En este caso "do shell script"

Eso te lleva a: enlace

El ejemplo allí muestra cómo establecer una variable para un nombre de host y luego llamar a ping:

set theHostName to "www.apple.com"
do shell script "ping -c1 " & theHostName

Entonces, en tu caso necesitarás:

do shell script "/path/to/script.sh"  & myFile

En ese momento, es probable que se encuentre con problemas de ruta, por lo que ejecutar pequeños fragmentos de código en el editor, observar el resultado e iterar debería llevarlo a soluciones como errores inevitables en la ruta, el análisis y la lógica. Dejé un error tipográfico en el segundo ejemplo de "do shell script". Preste atención a los espacios y comillas :-)

    
respondido por el bmike 21.06.2016 - 12:45

Lea otras preguntas en las etiquetas