¿Cómo descomprimir y ejecutar .app?

Estoy tratando de ejecutar una aplicación AppleScript que está comprimida.

unzip -p file.app.zip | open -

o

open < $(unzip -p file.app.zip)

es posible?

Lo intentaste ? lo que sucede
Solo imprime las openopciones de ayuda.
Abrir qué ? Dónde ? descomprimir creará una nueva carpeta (con el mismo nombre que la carpeta zip)
Es un pequeño script de shell que escribí. Es cierto que usar una tubería complica esto. Pero me gustaría saber cómo hacerlo. La -popción con descomprimir imprime el contenido usando stdout
déjame darte algunos puntos por intentarlo
Hay una razón por la que las aplicaciones se distribuyen en .dmg. Puede montar el disco que está comprimido y ejecutar la aplicación. Otros peajes de Unix no tratan la aplicación como una sola cosa sino como una carga de archivos y directorios separados
@Buscar웃, dijiste: "... descomprimir creará una nueva carpeta (con el mismo nombre que la carpeta zip)", ¡ eso no es cierto con la -p opción utilizada en el OP, por ejemplo unzip -p ...! De la unzip página man : " -p extract files to pipe (stdout)."

Respuestas (2)

Como se trata de una aplicación .app comprimida en zip , que es un paquete de aplicaciones con muchos archivos, creo que primero tendrá que extraer la aplicación al disco para abrirla, porque el open comando para abrir una aplicación tiene la forma de open -a ...y no toma entrada de stdout.

Lo siguiente asume que el nombre de la aplicación file.app.zipes fileo el nombre exacto de la aplicación dentro del .ziparchivo:

unzip -oq "file.app.zip" -d /tmp; open -a "/tmp/file.app"; sleep 1; rm -r "/tmp/file.app"

La línea de comando compuesta anterior extrae el archivo file.app.zipto /tmpy luego lo abre, espera un segundo y luego elimina el archivo /tmp/file.app. Tenga en cuenta que es posible que sea necesario ajustar el valor del sleep comando para que la aplicación no se elimine antes de que se abra y termine de ejecutarse.

Tenga en cuenta que el contenido de /tmp, que en realidad es /private/tmp, se elimina automáticamente al reiniciar. Por lo tanto, la línea de comando compuesta podría acortarse si no le importa si la aplicación permanece /tmp'hasta el próximo reinicio:

unzip -oq "file.app.zip" -d /tmp; open -a "/tmp/file.app"
¿ Reemplazar el ;con &&agregaría una capa adicional de manejo de errores? Tengo entendido que &&garantiza que el siguiente comando solo se ejecute si el anterior finalizó sin errores.

Está solicitando el opencomando para abrir contenido de stdin. opense puede hacer para leer, stdinpero abrirá los contenidos en el editor de texto, que no es lo que desea.

Intente usar osascriptdirectamente: si el archivo comprimido es simplemente AppleScript, entonces lo logra con lo siguiente.

unzip -p file.zip | osascript - 

De la osascriptpágina de manual:

osascript buscará el script en uno de los siguientes tres lugares:

  1. Especificado línea por línea usando los modificadores -e en la línea de comando.

  2. Contenido en el archivo especificado por el primer nombre de archivo en la línea de comando. Este archivo puede ser texto sin formato o un script compilado.

  3. Aprobado usando la entrada estándar. Esto funciona solo si no hay argumentos de nombre de archivo; para pasar argumentos a un script de lectura STDIN, debe especificar explícitamente '-' para el nombre del script.

¿Realmente probaste para ver si lo que publicaste funciona? Lo pregunto porque se produce un error en mis pruebas.
Por supuesto. El comando asume que el archivo descomprimido es un comando AppleScript de texto sin formato.
@ user3439894, mira mi comentario anterior. Esta solución funciona para AppleScript simple y antiguo. Su respuesta es más apropiada dada una aplicación AppleScript.
@ephsmith, gracias por la respuesta, pero esto también me da errores con: 0:1: syntax error: A unknown token can't go here. (-2740). Mi prueba .zip contiene un AppleScript con lo siguiente:do shell script "touch /Users/$USER/Desktop/test"