1 votos

Cómo pasar un archivo como una variable de AppleScript para un Bash script de shell

Tengo un problema de dos partes.

  1. Estoy tratando de pasar una variable de AppleScript para ser utilizado como una variable dentro de un shell de bash script. No puedo entender cómo este trabajo. He leído acerca de la concatenación de la variable y el do shell script comando con & dentro de AppleScript. Pero que en realidad no funciona con una larga secuencia de comandos.

Aquí está el corto de AppleScript para seleccionar un archivo y (con suerte) a pasar a lo largo de la 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, a continuación, la secuencia de comandos 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 de la secuencia real, pero creo que la intención es clara. Estoy seguro de cómo pasar de la myFile variable DE Applescript para el shell.

  1. El segundo problema es que el trans comando (que es un lugar práctico de la línea de comandos traductor) utiliza la gawk comando que por supuesto se instala junto con el trans el programa en sí. Pero cuando se ejecute desde Applescript me sale el mensaje de error:

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

Sé que AppleScript necesidades de la fullpath en orden para que esto funcione. Pero, ¿cómo puedo proporcionar la ruta de acceso completa para un comando bien integrado dentro de casi 5000 líneas de código? ¿Puedo cambiar el código de la trans propio programa para proporcionar la ruta de acceso completa a gawk?

También me doy cuenta de que yo podía hacer todo desde dentro de la cáscara y que mucho de esto se le añade complejidad donde no es necesario. Pero creo que aún así vale la pena saber cómo hacerlo.

Gracias por la lectura.

1voto

Oskar Puntos 1242

El primer problema con el primer script es que no estás usando el conjunto de miarchivo variable.

He aquí una guía general para la obtención de ayuda:

Abrir editor de secuencias de Comandos - utilizar el menú de ayuda para el lanzamiento de la Guía de Lenguaje de AppleScript y la búsqueda de los comandos que usted tiene. En este caso, "do shell script"

Que te lleva a: https://developer.apple.com/library/prerelease/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/CallCommandLineUtilities.html

El ejemplo muestra cómo definir una variable para un nombre de host y, a continuación, llamar ping:

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

Así que, en su caso, usted necesitará:

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

En ese punto, es probable que ejecutar en la ruta de los problemas por lo que se ejecuta pequeños fragmentos de código en el editor, a la vista del resultado y la iteración debe llegar a soluciones como inevitables errores en la ruta, el análisis, la lógica de los cultivos. He dejado un error tipográfico en el segundo "do shell script" ejemplo de arriba - prestar atención a los espacios y citas :-)

1voto

klanomath Puntos 19587

El primer problema puede ser resuelto por la exportación de la ruta de acceso dentro de la do shell script parte:

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 de ejecución debe ser:

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

El resultado es la ruta de acceso del archivo elegido.

Usted no tiene que agregar un segundo do shell script para la secuencia de comandos de shell, porque tan pronto como la primera, uno se muere y no hay valores exportados.

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