El comando de terminal osalang
enumera los siguientes idiomas OSA instalados compatibles con osascript
.
AppleScript
JavaScript
Generic Scripting System
Usar AppleScript o JavaScript funciona. Por ejemplo:
osascript -l JavaScript \
-e 'Application("iTunes").currentTrack.name()'
Sin embargo, algo como lo siguiente devuelve un error de "token desconocido encontrado".
osascript -l 'Generic Scripting System' \
-e '#!/bin/bash' \
-e 'echo $HOME'
¿Cómo se invoca osascript
el 'Sistema de secuencias de comandos genérico' desde la línea de comando para algunas secuencias de comandos que no son de AppleScript ni de JavaScript ... sin usar ningún AppleScript o JavaScript (intermedio)? ¿Es esto posible?
De acuerdo con las partes internas del sistema OS X, el "Sistema de secuencias de comandos genérico" es una clase genérica que contiene los dos tipos de secuencias de comandos compatibles:
No es una tercera opción que agrega uno o más dialectos nuevos, sino un contenedor para contener los existentes. Esto se explica indirectamente en la documentación de Apple: enumeran los dos idiomas y no mencionan la clase contenedora (o el nombre que sea):
Si necesitara otros idiomas, llamaría a AppleScript "do shell script..." para luego llamar a cualquier ejecutable de shell que envíe Apple o que haya instalado ( bash
, sh
, python
, swift
, perl
, ...).
Lo que osalang
realmente está haciendo es hablar con el Administrador de componentes y devolver todos los componentes de tipo osa
(el espacio al final es intencional, ya que este es un OSType, también conocido como FourCC). Component Manager es un marco de complemento de software que se introdujo originalmente en Classic Mac OS, primero para que lo usara QuickTime, y luego fue muy utilizado por muchos componentes de Classic Mac OS, entre otros Open Scripting Architecture (OSA). En OS X / macOS (y especialmente en versiones recientes), ha quedado obsoleto y se usa mucho menos que el Mac OS clásico, ya que ahora hay alternativas mucho mejores (como las clases de Objective C). Las únicas dos cosas en las versiones recientes de macOS que aún usan el Administrador de componentes son OSA y ciertas API de audio. (Por el contrario, en Classic Mac OS se usó para muchas otras cosas, como QuickDraw GX y ColorSync, que desde entonces han sido reemplazadas por tecnologías más nuevas).
Entonces, macOS viene con tres osa
tipos de componentes listos para usar: ascr
(AppleScript), jscr
(JavaScript) y scpt
(Sistema de secuencias de comandos genérico). Los desarrolladores pueden registrar componentes adicionales para implementar más lenguajes OSA, aunque eso rara vez se hace. Lo que scpt
sí es que no es realmente un lenguaje, sino una capa de programación con la que los desarrolladores pueden hablar en lugar de tener que hablar directamente con los componentes de secuencias de comandos subyacentes, como ascr
y jscr
. Piense en ello como un intermediario, un intermediario. Si observa el SDK de macOS, puede encontrar su API declarada en OSAGeneric.h
la que se puede encontrar en el marco OpenScripting. Una de las funciones que agrega a los componentes subyacentes del lenguaje OSA es el enrutamiento de .scpt
archivos. Básicamente, un programa (comoosascript
o "Editor de scripts") puede llamar a una API ( OSALoad
) para cargar un .scpt
archivo. Hay un campo en el encabezado del archivo o en el tráiler que indica qué lenguaje de secuencias de comandos real se está utilizando. El sistema de secuencias de comandos genérico contiene el código para interpretar el encabezado o el tráiler del archivo y luego envía el contenido del .scpt
archivo al motor de lenguaje apropiado. Por lo tanto, hablar con el "Sistema de secuencias de comandos genérico", en lugar de hacerlo directamente con los motores de lenguaje subyacentes, es realmente importante para los desarrolladores si desean admitir la carga de .scpt
archivos en cualquier idioma.
l --marc l
osalang
no es una puerta de entrada más allá de AppleScript y JavaScript disponibles. Después de su respuesta, pensé en verificar el Monitor de actividad (botón de información, Abrir archivos y puertos) con la sesión interactivaosascript -l 'Generic Scripting System' -i
. ... el interactivo "Genérico" va directamente a los recursos del marco AppleScript.