Como se ha visto lo largo de este curso, AppleScript ofrece un amplio elenco de posibilidades de automatización del Mac ya sea mandando comandos al sistema o a aplicaciones que lo soporten. Pero la potencia de AppleScript no termina ahí, sino que, por un lado, va más allá de las aplicaciones comunes, permitiendo la comunicación con el sistema directamente mediante comandos “shell” y por otro permite traspasar las fronteras de tu máquina, comunicándose con otros sistemas Mac OS por la red, incluso accediendo a aplicaciones web estándar mediante protocolos igualmente comunes.

Accediendo a las entrañas del sistema

Como ya es sabido, con la aparición de Mac OS X, el sistema operativo dejó de lado sus anteriores fundamentos, para convertirse en un sistema moderno basado en UNIX. Esto ha traído unas cuantas ya conocidas ventajas entre las cuales se encuentra el, a veces temido, acceso a las interioridades del sistema, ejecutando comandos de texto a través del Terminal. La importancia de esto puede no parecer obvia a primera vista por lo que vamos a despejarla inmediatamente. Simplificándolo mucho, podemos imaginarnos el Mac OS X como un sistema basado en dos capas. La capa inferior es el sistema UNIX con toda su potencia y versatilidad, pero que tiene el gran “inconveniente” para los usuarios no expertos que su uso está restringido a la ejecución de comandos en modo de texto. Encima de esa capa Apple ha situado una segunda, con un entorno gráfico que permite que se controlen y ejecuten esos comandos de forma gráfica con la consabida facilidad que esto representa. Pero es ahí donde también reside su limitación. El sistema gráfico puede controlar gran parte del sistema operativo, pero no todo. Y es exactamente ahí donde el acceso a la capa UNIX nos permite ejecutar esos comandos que no se pueden hacer de forma gráfica.

Para poder aprovechar esa potencia también a través de AppleScript, Apple añadió un nuevo comando al repertorio del lenguaje que permite la comunicación con la “shell”, ejecutando comandos en modo de texto como si estuviéramos en el Terminal. Se trata del comando “do shell script” (ejecuta guión/script de “shell”). La sintaxis básica es la siguiente:

do shell script “comando”

En este caso deberemos sustituir “comando” por aquél que queramos ejecutar. Muchas veces el programa que ejecutemos devolverá un resultado al que queramos acceder. Para ello simplemente le diremos a AppleScript que el resultado de la ejecución lo meta en una variable. Escribir lo siguiente:

set resultado to do shell script “comando”

Una vez ejecutado el comando, el resultado del mismo se encontrará en forma de texto en la variable “resultado”. Por ejemplo podemos utilizar este comando en conjunción con el “ls” para listar el contenido de una carpeta. Esto no tiene mucho sentido para la mayoría de ellas ya que son directamente accesibles desde el Finder. No obstante si se puede aprovechar para aquellas que son invisibles y que por ello está ocultas para el Finder. Uno de los usos puede ser por ejemplo ver el listado de canciones que tenemos en nuestro iPod. Para ello ejecutaríamos el siguiente comando:

set directorios to do shell script “ls /Volumes/nombre_de_tu_ipod/iPod_Control/Music”

Deberemos cambiar “nombre_de_tu_ipod” por el de nuestro iPod. Como resultado obtendremos un listado de directorios que contienen los archivos reales. Si obtenemos el contenido de cada uno tendremos la listado de todos los archivos de audio que almacena el dispositivo. Esto lo haremos de la siguiente manera.

repeat with i from 1 to the count of words of ¬ the directorios

set carpeta to (directorioRaiz & “/” & ¬ (word i of directorios) as string) & “/”

set comando to “ls “ & carpeta

set archivos to do shell script comando

repeat with t from 1 to count paragraphs¬ of archivos

set the end of the canciones ¬ to paragraph t of archivos

end repeat

end repeat

Ya sólo nos queda mostrar el listado en una ventana para que todo esto sea más amigable que utilizar el Terminal.

set una_cancion to (choose from list canciones with prompt “Seleccione una canción:”) as string

El script resultante definitivo sería el siguiente:

set directorioRaiz to “/Volumes/¬ nombre_de_tu_ipod/iPod_Control/Music”

set comando to “ls “ & directorioRaiz

set canciones to {}

set directorios to do shell script comando

repeat with i from 1 to the count of words ¬ of the directorios

set carpeta to (directorioRaiz & “/” ¬ & (word i of directorios) as string) & “/”

set comando to “ls “ & carpeta

set archivos to do shell script comando

repeat with t from 1 to count paragraphs¬ of archivos

set the end of the canciones to ¬ paragraph t of archivos

end repeat

end repeat

set una_cancion to (choose from list ¬ canciones with prompt “Seleccione ¬ una canción:”) as string

Esto es sólo un ejemplo para ilustrar lo que se puede hacer con el comando, pero sin querer entrar en más disquisiciones sobre los comandos existentes a ejecutar en “shell”. No obstante se podría ampliar el ejemplo, desarrollando una aplicación con interfaz en AppleScript Studio, como vimos en el capítulo anterior, la cual permita copiar uno o varios archivos de la lista por ejemplo al escritorio. Esto facilitaría recuperar la música que tenemos en el iPod por si se borra del iTunes accidentalmente. La ampliación se deja para que la lleve a cabo el lector con los conocimientos adquiridos hasta el momento. Como apunte decir que lo único que sería necesario es incluir un manejador de evento que se lance cuando se haga doble clic sobre el nombre de una canción. Este podría ejecutar de nuevo un “do shell script” con el comando que copia un archivo de una localización a otra, es decir:

do shell script “cp /Volumes/nombre_de_tu_ipod/iPod_Control/Music/F00/micancion.mp3 ~/Desktop/micancion.mp3”

Evidentemente habría que modificarlo de forma que coincidan el nombre del iPod, el directorio (F00) y el nombre de la canción.

Ampliando “do shell script”

Una vez que empecemos a utilizar más y más el comando y lógicamente ejecutar aplicaciones de “shell” más complejas, es posible que en algún momento nos encontremos con la necesidad de llamar algún comando con permisos de administrador. Apple ha previsto esta posibilidad y para ello se puede añadir la coletilla “with administrator privileges”. Quedaría el comando de la siguiente manera:

do shell script “comando” with administrator privileges

Esto puede ser útil para todo tipo de operaciones que se quieran llevar a cabo para configurar el sistema. Al correr el script se abrirá una ventana preguntando por la clave de administrador. Si necesitamos acceder como administrador pero no queremos que nos pregunte la clave, podremos incluirla directamente en el script, aunque no es muy recomendable. La forma de hacerlo sería:

do shell script “comando” password “miclave” with administrator privileges

Otra cosa a tener en cuenta es que cada llamada a “do shell script”, ejecuta el comando en cuestió