scripts script programas programacion pasar parametros espaƱol ejemplos comandos comando macos bash applescript osascript

macos - programas - Combinando variables en Bash para formar un comando enviado a AppleScript usando el comando osascript



scripts bash ejemplos (2)

Estoy tratando de hacer que este script funcione. Es un script Bash que debe tomar algunas variables, juntarlas y usar el resultado para enviar un comando AppleScript . to_osa manualmente la cadena repetida desde la variable to_osa detrás de osascript -e a la terminal funciona como quiero y espero que lo osascript -e . Pero cuando intento combinar el comando osascript -e y la cadena to_osa , no funciona. ¿Cómo puedo hacer que esto funcione?

the_url="/"http://stackoverflow.com/questions/1521462/looping-through-the-content-of-a-file-in-bash/"" the_script=''tell application "Safari" to set the URL of the front document to '' delimiter="''" to_osa=${delimiter}${the_script}${the_url}${delimiter} echo ${to_osa} osascript -e ${to_osa}

Además de trabajar de forma manual, el script también funciona cuando escribo el comando deseado en un script y luego lo ejecuto:

echo "osascript -e" $to_osa > ~/Desktop/outputfile.sh sh ~/Desktop/outputfile.sh


El código ejecutable de triturado de cadenas es propenso a errores y malvado, y no hay absolutamente ninguna necesidad aquí. Es trivial pasar argumentos a un AppleScript definiendo un manejador explícito de ''ejecución'':

on run argv -- argv is a list of strings -- do stuff here end run

que luego invocas así:

osascript -e /path/to/script arg1 arg2 ...

Por cierto, si tu script requiere un número fijo de argumentos, también lo escribes así:

on run {arg1, arg2, ...} -- each arg is a string -- do stuff here end run

...

Yendo más lejos, incluso puedes hacer que el AppleScript sea ejecutable directamente como lo harías con cualquier otro script de shell. Primero, agregue un hashbang de la siguiente manera:

#!/usr/bin/osascript on run argv -- do stuff here end run

a continuación, guárdelo en formato de texto sin formato sin formato y ejecute chmod +x /path/to/myscript para que el archivo sea ejecutable. Luego puede ejecutarlo desde el shell de la siguiente manera:

/path/to/myscript arg1 arg2 ...

O bien, si no desea especificar la ruta completa cada vez, coloque el archivo en /usr/local/bin o en algún otro directorio que esté en la RUTA de su shell:

myscript arg1 arg2 ...

...

Así que aquí está cómo debería escribir su script original:

#!/bin/sh the_url="http://.com/questions/1521462/looping-through-the-content-of-a-file-in-bash" osascript -e ''on run {theURL}'' -e ''tell application "Safari" to set URL of document 1 to theURL'' -e ''end run'' $the_url

Rápido, simple y muy robusto.

-

ps Si prefiere abrir una URL en una ventana nueva en lugar de una existente, consulte la página de manual de la herramienta open OS X.


Como regla general, no ponga comillas dobles en la variable, póngalas alrededor de la variable. En este caso, es más complicado, ya que tiene algunas comillas dobles para las comillas a nivel de bash, y algunas para las comillas a nivel de AppleScript; en este caso, las comillas a nivel de AppleScript van en la variable, las citas de nivel de bash van alrededor de la variable:

the_url="/"http://.com/questions/1521462/looping-through-the-content-of-a-file-in-bash/"" the_script=''tell application "Safari" to set the URL of the front document to '' osascript -e "${the_script}${the_url}"

Por cierto, usar echo para verificar cosas como esta es muy engañoso. echo te dice qué hay en la variable, no qué se ejecutará cuando hagas referencia a la variable en una línea de comando. La mayor diferencia es que echo imprime sus argumentos después de haber pasado por el análisis de bash (eliminación de comillas y escape, etc.), pero cuando dices "Pegar manualmente la cadena ... funciona" estás diciendo que es lo que quieres antes de analizar . Si las comillas están ahí en la cadena repetida, eso significa que bash no las reconoció como citas y las elimina. Comparar:

string=''"quoted string"'' echo $string # prints the string with double-quotes around it because bash doesnt''t recognize them in a variable echo "quoted string" # prints *without* quotes because bash recognizes and removes them