macos - simbolo - Lanzar una aplicación en OS X con línea de comando
simbolo=en mac (9)
Quiero lanzar una aplicación en OSX desde un script. Necesito pasarle los argumentos de línea de comando. Desafortunadamente, open
no acepta argumentos de línea de comando.
La única opción que puedo pensar es usar nohup myApp > /dev/null &
para iniciar mi aplicación para que pueda existir independientemente del script que la lanza.
¿Alguna mejor sugerencia?
A partir de OS X Yosemite , ahora podemos usar AppleScript y Automator para automatizar tareas complejas. JavaScript para automatización ahora se puede utilizar como lenguaje de scripting.
Esta página ofrece un buen ejemplo de secuencia de comandos de ejemplo que se puede escribir en la línea de comandos utilizando el modo interactivo bash y osascript . Abre una pestaña de Safari y navega a example.com
.
osascript -l JavaScript -i
Safari = Application("Safari");
window = Safari.windows[0];
window.name();
tab = Safari.Tab({url:"http://www.example.com"});
window.tabs.push(tab);
window.currentTab = tab;
Como se mencionó en la pregunta here , el comando open
en 10.6 ahora tiene un indicador args
, por lo que puede llamar:
open -n ./AppName.app --args -AppCommandLineArg
Con applescript:
tell application "Firefox" to activate
En OS X 10.6, el comando open
se mejoró para permitir el paso de argumentos a la aplicación:
open ./AppName.app --args -AppCommandLineArg
Pero para versiones anteriores de Mac OS X, y debido a que los paquetes de aplicaciones no están diseñados para pasar argumentos de línea de comando, el mecanismo convencional es usar Apple Events para archivos como here para aplicaciones Cocoa o here para aplicaciones Carbon. También podría hacer algo pesado pasándole parámetros al usar variables de entorno.
En caso de que tu aplicación necesite trabajar en archivos (lo que normalmente esperarías pasar como: ./myApp *.jpg
), lo harías así:
open *.jpg -a myApp
Quería tener dos instancias separadas de Chrome en ejecución, cada una con su propio perfil. Quería poder iniciarlos desde Spotlight , como es mi costumbre para iniciar aplicaciones de Mac. En otras palabras, necesitaba dos aplicaciones regulares de Mac, regChrome
para navegación normal y altChrome
para usar el perfil especial, que se puede iniciar fácilmente tecleando ⌘-espacio para que aparezca Spotlight, luego ''reg'' o ''alt'', luego Enter.
Supongo que la fuerza bruta para lograr el objetivo anterior sería hacer dos copias del paquete de aplicaciones de Google Chrome bajo los nombres respectivos. Pero eso es feo y complica la actualización.
Lo que terminé con dos aplicaciones de AppleScript que contienen dos comandos cada una. Aquí está el de altChrome
:
do shell script "cd /Applications/Google// Chrome.app/Contents/Resources/; rm app.icns; ln /Users/garbuck/local/chromeLaunchers/Chrome-swirl.icns app.icns"
do shell script "/Applications/Google// Chrome.app/Contents/MacOS/Google// Chrome --user-data-dir=/Users/garbuck/altChrome >/dev/null 2>&1 &"
La segunda línea inicia Chrome con el perfil alternativo (el --user-data-dir
).
La primera línea es un intento fallido de dar a las dos aplicaciones iconos distintos. Inicialmente, parece funcionar bien. Sin embargo, tarde o temprano, Chrome vuelve a leer su archivo de iconos y obtiene el que corresponde a la aplicación que se inició la última, lo que resulta en dos aplicaciones en ejecución con el mismo icono. Pero no me tomé la molestia de intentar arreglarlo: mantengo los dos navegadores en escritorios separados, y navegar entre ellos no ha sido un problema.
Recomendaría la técnica que MathieuK ofrece. En mi caso, tuve que probarlo con Chromium:
> Chromium.app/Contents/MacOS/Chromium --enable-remote-fonts
Me doy cuenta de que esto no resuelve el problema del OP, pero con suerte salva el tiempo de otra persona. :)
Un paquete de aplicaciones (un archivo .app
) es en realidad un grupo de directorios. En lugar de usar open
y el nombre .app
, puedes moverte hacia él e iniciar el binario real. Por ejemplo:
$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper
Ese es el binario real que podría aceptar argumentos (o no, en el caso de LittleSnapper
).
open
también tiene un indicador -a, que puede usar para abrir una aplicación desde dentro de la carpeta Aplicaciones por su nombre (o por identificador de paquete con -b indicador). Puede combinar esto con la opción --args para lograr el resultado que desea:
open -a APP_NAME --args ARGS
Para abrir un video en un reproductor VLC que debería escalar con un factor 2x y un ciclo, por ejemplo, ejecute exectute:
open -a VLC --args -L --fullscreen
Tenga en cuenta que no pude obtener la salida de los comandos al terminal. (Aunque no intenté nada para resolver eso)