Soy un "usuario avanzado" y desarrollador de Windows desde hace mucho tiempo que recientemente decidió cambiar a Mac OS X.
En OS X Lion y, de hecho, en versiones anteriores, parece haber dos opciones principales para la creación de scripts y la automatización en OS X: AppleScript y Bash. Este último es, por supuesto, una consecuencia directa de que OS X use el shell "bash" de Unix, mientras que el primero es la innovación de Apple. Las sintaxis son claramente muy diferentes, ya que AppleScript tiene un estilo de lenguaje pseudo-natural.
Mi pregunta es, ¿se usan comúnmente AppleScript y Bash script (de hecho, deberían usarse) para tareas y propósitos dispares en OS X. Soy vagamente consciente de la gran variedad de tareas que puedo realizar con Bash script, aunque por supuesto el código para algunos más avanzados pueden enredarse rápidamente. ¿Estos dos lenguajes tienen casos de uso superpuestos o casi idénticos, a pesar de la invención posterior de AppleScript de Apple, o están destinados a ser utilizados con diferentes escenarios en mente? Se agradecería una descripción general de alto nivel, así como algunos ejemplos específicos.
fuente
Respuestas:
Tanto el shell como AppleScripts se pueden usar en cualquier lugar, ya sea apropiado.
AppleScripts funciona mejor cuando se habla con aplicaciones e instalaciones del sistema a nivel de usuario. (Por ejemplo, puede decir
tell app "iTunes" to play
y lo hará, otell app "Finder" to open the first file of the second window
).Las secuencias de comandos de shell (se refirió a bash) funcionan mejor cuando se habla de objetos de 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 al código de AppleScript desde el shell conosascript -e "AppleScript"
. Además, hay una cierta superposición entre los dos (especialmente cuando se trata de operaciones del sistema de archivos).Ciertamente, hay más recursos para aprender scripts de shell 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 crear secuencias de comandos es con Automator, donde puede utilizar shell o AppleScripting (o ambos) junto con módulos prefabricados de varias aplicaciones que haya instalado.
fuente
Si bien cualquiera de los contextos de scripting puede hacer cualquier cosa que el otro pueda hacer (porque los scripts de shell pueden
/usr/bin/osascript
invocar para invocar un AppleScript y AppleScript tiene eldo shell script
comando), de hecho, hay contextos para los cuales uno es más adecuado que el otro.Ambos lenguajes de secuencias de comandos son lenguajes de "pegamento": pueden hacer cosas mínimas por sí mismos y, en su lugar, realizar la mayoría de sus tareas invocando las capacidades de otros programas. Los scripts de Shell utilizan tuberías Unix, mientras que AppleScript tiene la
tell application
sintaxis.Donde divergen es que AppleScripts se comunica directamente con aplicaciones programables (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 muchos no).
Cuando se trata de tareas de administración de archivos, ambos enfoques pueden funcionar. Uno puede
Tell Application Finder
copiar archivos o ejecutar elcp
comando 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 con el otro y, por lo tanto, preferirán usar esa herramienta. Pero una mejor consideración es del usuario del script. AppleScript a menudo se puede invocar desde la GUI de Mac: haciendo doble clic en una aplicación AppleScript, o soltando archivos en una, o usando un menú AppleScript en todo el sistema o dentro de un programa en particular. Se pueden configurar programas como Mail para ejecutar un AppleScript en los mensajes entrantes para filtrarlos. Para los usuarios acostumbrados a usar Macs de forma "similar a Mac" (es decir, desde la GUI), los AppleScripts suelen ser más accesibles.Los scripts de Shell a menudo (pero no siempre) viven en la Terminal. Si ya está utilizando Terminal, ejecutar un script de shell puede ser más conveniente que invocar un AppleScript. Por otro lado, muchos usuarios se desaniman al tener que escribir comandos en una ventana de Terminal, o incluso 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 soy minoritario en ese sentido. Los scripts de shell son familiares para los usuarios de muchos sistemas diferentes tipo Unix.
En cualquier caso, ambas son herramientas poderosas para obtener un mejor control sobre su Mac.
fuente
Tell Application Finder
para copiar archivos se abrirá una ventana con una barra de progreso visible, mientrascp
que no. ¿Está bien?Las otras respuestas dan excelentes descripciones de alto nivel de la intención detrás de estas dos técnicas de secuencias de comandos. Tal vez solo te daré ejemplos de cómo los uso.
Con Applescript, hice reglas de procesamiento para Mail, conecté BBEdit a R para procesamiento estadístico, creé acciones complejas 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, esta es la manipulación automática de aplicaciones complejas con GUI.
Con las secuencias de comandos Bash, he creado rutinas automáticas de procesamiento de imágenes con Imagemagick, rutinas de procesamiento de PDF con Ghostscript, rutinas de hora y fecha, y mucho procesamiento de texto con Bash, sed / awk y Perl. Las utilidades de Unix tienden a ser esbeltas, rápidas y flexibles, y Bash es una excelente manera de combinarlas en herramientas muy potentes y fáciles.
A veces llamo a los scripts de Bash desde un Applescript, generalmente para fines de procesamiento de texto (GREP) o para buscar sitios web (curl). Casi siempre uso esta técnica para obtener un poco de datos o una variable para usar más en mi Applescript.
fuente
Puede ser una simplificación excesiva, pero las secuencias de comandos de shell son para combinar programas existentes para realizar nuevas tareas, mientras que AppleScript es para controlar aplicaciones (principalmente GUI) de forma remota. Los programas clásicos de Unix generalmente leen alguna entrada y producen algo de salida y los scripts de shell le permiten combinarlos. AppleScript es para automatizar aplicaciones GUI.
fuente