2 votos

MacOS: ¿Cómo puedo hacer doble clic en un archivo y mostrar la salida de un comando de CLI en el archivo?

Existe un tipo de archivo llamado "netCDF". Mi objetivo es poder hacer doble clic en un archivo netCDF en Finder y ver la salida de texto de un comando de CLI al que se le da el nombre del archivo.

Especificaciones: Hay un comando de línea de comandos que muestra el contenido de un archivo netCDF:

$ ncdump -h tuarchivo.nc

Este comando muestra el contenido del archivo netCDF en la terminal actual.

¿Cómo puedo ver la misma salida cuando hago doble clic en el archivo en Finder?

Editar: Lo siguiente es una descripción de un enfoque fallido.

He avanzado un poco hacia una solución.

Siguiendo este hilo

¿Cómo hacer una aplicación Mac OS X .app con un script de shell?

He podido crear una "app" de macOS que en realidad es un script de shell:

#!/bin/sh
/usr/local/bin/ncdump -h "$@"

Hasta ahora, he podido verificar que puedo invocar esta "app" desde Finder y que en realidad se ejecuta el script de shell anterior. Sin embargo, descubrí que el script de shell no recibe el nombre de archivo como argumento de línea de comando. (Puedes ver lo que está sucediendo modificando la línea a /usr/local/bin/ncdump -h "$@" > $HOME/tmp/logfile.txt 2>&1)

Entonces, tengo dos preguntas específicas

  1. ¿Cómo puede un script de shell (como app) obtener el nombre de archivo cuando se invoca desde Finder?

  2. ¿A qué aplicación GUI debería enviar su stdout y cómo?

0 votos

¿Qué sucede si lo ejecutas de esta manera: /RUTA/A/MyApp.app/Contents/MacOS/MyApp (sin open -a)?

0 votos

"¿Qué sucede si lo ejecutas así . . . (sin abrir -a)" . . . Imprime la salida en la terminal actual. ¿Eso responde tu pregunta?

0 votos

¿Sí. Entonces hay alguna razón para ejecutar la aplicación con open -a en lugar de ejecutarla directamente?

0voto

Theresia Vidi Puntos 1

Si tu aplicación es en realidad solo un script de shell, no necesitas el comando open para ejecutarlo. Simplemente ejecuta el script de shell usando ./RUTA_AL_SCRIPT - en tu caso, esto sería ./MyApp.app/MyApp, si seguiste el nombre sugerido en el hilo vinculado. A partir de ahí, puedes redirigir o canalizar la salida como lo haces con cualquier otro comando de shell.

Sin embargo, si tienes que usar el comando open: Parece que hay un argumento --stdout, que podría resolver tu problema. Desde man open:

--stdout RUTA
    Lanza la aplicación con stdout conectado a RUTA.

Edit

La edición de tu pregunta cambia mucho: Quieres iniciar la Aplicación/Script a través de Finder, pero luego ver la "Salida de Terminal".

Puedes, por ejemplo, usar AppleScript para mostrar una notificación o diálogo que contenga la salida de tu aplicación (dependiendo de cuánto texto sea). Esto se puede hacer usando el comando osascript -e '[COMANDOS_DE_APPLESCRIPT]'. Por ejemplo, osascript -e 'display dialog "Texto de Ejemplo"' mostrará una pequeña ventana emergente que contiene "Texto de Ejemplo" y botones Ok/Cancelar. Más información sobre diálogos se puede encontrar, por ejemplo, aquí.

Para que esto funcione, debes redirigir la salida de los comandos en tu script a una variable, esto se puede hacer, por ejemplo, con miVariable=$(...comando original...)

1 votos

¿Intentaste si realmente -stdout resuelve el problema?

1 votos

@JLubberger Gracias por la sugerencia. Acabo de probar open --stdout $HOME/tmp/tmp.log -a MyApp y encontré que el archivo de salida se crea pero está vacío. Si invoco directamente el shellscript desde la línea de comandos, imprime su salida en la terminal actual. Por lo tanto, el comando open debe estar enviando la salida estándar a algún lugar.

0 votos

@JLubberger Gracias de nuevo por tu ayuda y pido disculpas por la confusión. Ahora he reescrito totalmente mi pregunta. Después de la última edición a mi pregunta, me di cuenta de que también has editado la tuya. Entonces, básicamente, debería usar AppleScript, ¿no un script de shell, verdad?

0voto

icemanovich Puntos 31

Abandonando la idea de convertir un script de shell en una aplicación, adopté la idea de @JLubberger de usar un AppleScript. Lo mejor que he logrado hasta ahora es

on open filename
    tell application "Terminal"
        do script "ncdump -h " & quoted form of POSIX path of filename & " 2>&1"
        activate
    end tell
end open

y exportar esto como una aplicación.

Luego, abre un archivo netCDF con esta aplicación, lo cual lanzará Terminal, que mostrará la salida del comando "ncdump -h filename".

Un aspecto insatisfactorio de esta solución es que Terminal muestra salidas adicionales. Preferiría tener una ventana que solo muestre la salida del comando. Esto sería un enfoque diferente porque tendría que encontrar una forma de ejecutar el comando desde el script y enviar su salida a una ventana GUI. En contraste, el script anterior le pide a Terminal tanto que ejecute el comando como que muestre su salida.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X