AppleScript vs. Bash script?

12

Soy un "usuario avanzado" de Windows y desarrollador que recientemente decidió cambiarse a Mac OS X.

En OS X Lion y en las versiones anteriores, parece que hay dos opciones principales para la creación de scripts y la automatización en OS X: AppleScript y Bash. El último es, por supuesto, una consecuencia directa de OS X al usar el shell "bash" de Unix, mientras que el primero es la innovación de Apple. Las sintaxis son claramente muy diferentes, con AppleScript con un estilo de lenguaje pseudo-natural.

Mi pregunta es si se utilizan los scripts de AppleScript y Bash (de hecho, si se deben usar) para tareas y propósitos dispares en OS X. Conozco vagamente la gran cantidad de tareas que puedo realizar con el script de Bash, aunque Por supuesto, el código de algunos más avanzados se puede convertir rápidamente en convolutivo. ¿Estos dos idiomas tienen casos de uso superpuestos o casi idénticos, a pesar de la invención posterior de Apple de AppleScript, o están pensados para ser usados con diferentes escenarios en mente? Se agradecería una descripción general de alto nivel, así como algunos ejemplos específicos.

    
pregunta Noldorin 01.06.2012 - 01:14

4 respuestas

15

Tanto el shell como el AppleScripts pueden usarse en cualquier lugar, ya sea que sea apropiado.

Los AppleScripts funcionan mejor cuando hablan con aplicaciones y las instalaciones del sistema a nivel de usuario. (Por ejemplo, puedes decir tell app "iTunes" to play y lo hará, o tell app "Finder" to open the first file of the second window .)

Los scripts de shell (a los que te referiste a bash) funcionan mejor cuando hablas con objetos del sistema de bajo nivel y cosas de Unixy.

Ambos son interoperables: puede llamar a un comando de shell desde AppleScript con do shell script "command here" y puede llamar código de AppleScript desde la shell con osascript -e "AppleScript" . Además, hay un poco de superposición entre los dos (especialmente cuando se trata de operaciones del sistema de archivos).

Ciertamente, hay más recursos para aprender shell scripting en línea que AppleScript y no ayuda que AppleScript tenga la reputación de ser un lenguaje de "solo lectura" (es decir, más difícil de escribir que de leer).

En cualquier caso, la forma más moderna de hacer scripts es con Automator, donde puedes usar Shell- o AppleScripting (o ambos) junto con módulos precompilados de varias aplicaciones que has instalado.

    
respondido por el CajunLuke 01.06.2012 - 02:08
8

Si bien el contexto de script puede puede hacer cualquier cosa que el otro (ya que los scripts de shell pueden llamar a /usr/bin/osascript para invocar un AppleScript, y AppleScript tiene el comando do shell script ), existen contextos para los cuales uno se adapta mejor que el otro.

Ambos lenguajes de script son lenguajes de "pegamento": ellos mismos pueden hacer cosas mínimas y, en su lugar, realizar la mayoría de sus tareas invocando las capacidades de otros programas. Los scripts de shell utilizan tuberías de Unix, mientras que AppleScript tiene la sintaxis tell application .

Donde divergen es que AppleScripts se comunican directamente con aplicaciones de secuencias de comandos (casi siempre aplicaciones GUI), mientras que los scripts de shell se comunican principalmente con programas de línea de comandos (algunos de los cuales pueden invocar interfaces gráficas de usuario, pero otros no).

Cuando se trata de tareas de administración de archivos, ambos enfoques pueden funcionar. Uno puede Tell Application Finder para copiar archivos, o ejecutar el comando cp en un script de shell. Entonces, ¿por qué usar uno sobre el otro? Ciertamente, algunos escritores de guiones están más familiarizados con un idioma que el otro y, por lo tanto, preferirán usar esa herramienta. Pero una mejor consideración es del usuario del script. AppleScript puede invocarse a menudo desde la GUI de Mac: haga doble clic en una aplicación AppleScript, coloque archivos en uno o utilice un menú AppleScript para todo el sistema o dentro de un programa en particular. Los programas como Mail se pueden configurar para ejecutar un AppleScript en los mensajes entrantes para filtrarlos. Para los usuarios que están acostumbrados a usar Mac de una manera "similar a Mac" (es decir, desde la GUI), a menudo los AppleScripts son más accesibles.

Los scripts de shell a menudo (pero no siempre) viven en la Terminal. Si uno ya está utilizando Terminal, ejecutar un script de shell puede ser más conveniente que invocar un AppleScript. Por otro lado, muchos usuarios están molestos al tener que escribir comandos en una ventana de Terminal, o incluso al hacer clic en un archivo de script que abre una ventana de Terminal para hacer su magia. Personalmente encuentro que la sintaxis de los scripts de shell es más legible que la de AppleScripts, pero sospecho que estoy en una minoría en eso. Los scripts de shell son familiares para los usuarios de muchos sistemas diferentes similares a Unix.

En cualquier caso, ambas son herramientas poderosas para obtener un mejor control sobre tu Mac.

    
respondido por el Daniel 01.06.2012 - 04:05
4

Las otras respuestas ofrecen una visión general de alto nivel de la intención detrás de estas dos técnicas de scripting. Tal vez solo te dé ejemplos de cómo los uso.

Con Applescript, hice reglas de procesamiento para Correo, conecté BBEdit a R para procesamiento estadístico, creé complejas Acciones de Carpeta y realicé una reorganización masiva basada en el tiempo de mis fotos en iPhoto y Aperture. También he creado mini-aplicaciones con botones y pantallas de texto. Básicamente, esto es la manipulación automática de aplicaciones complejas con GUIs.

Con Bash scripting, he creado rutinas automáticas de procesamiento de imágenes con Imagemagick, rutinas de procesamiento de PDF con Ghostscript, rutinas de fecha y hora y mucho procesamiento de texto con Bash, sed / awk y Perl. Las utilidades de Unix tienden a ser magras, rápidas y flexibles, y Bash es una excelente manera de combinarlas en herramientas muy poderosas y fáciles.

A veces llamo Bash scripts desde un Applescript, generalmente con fines de procesamiento de texto (GREP) o para buscar sitios web ligeros (curl). Casi siempre uso esta técnica para obtener un poco de datos o una variable para usar más en mi Applescript.

    
respondido por el Ash 01.06.2012 - 03:35
3

Puede ser una simplificación excesiva, pero los scripts de shell son para combinar programas existentes para realizar nuevas tareas, mientras que AppleScript controla las aplicaciones (principalmente GUI) de forma remota. Los programas clásicos de Unix normalmente leen algo de entrada y producen algo de salida y los scripts de shell te permiten combinarlos. AppleScript es para automatizar las aplicaciones GUI.

    
respondido por el lhf 01.06.2012 - 02:07

Lea otras preguntas en las etiquetas