¿Hay alguna manera fácil de agregar argumentos de línea de comandos a una aplicación en una Mac? Por ejemplo, para ejecutar Opera en modo quiosco o usar un perfil diferente en Firefox, puedo escribir
$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote
En Windows puedo agregar los argumentos a las propiedades de acceso directo, pero como las Mac no usan el acceso directo per se y ejecutan las aplicaciones directamente, esto no es posible.
He descubierto que iniciar las aplicaciones a través de bash o Applescript funciona parcialmente:
# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote
# Applescript
do shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"
Puedo hacer que estos sean ejecutables y asignar un icono y todo funciona muy bien, excepto que cuando ejecuto cualquiera de estos pseudo programas, una ventana de terminal o un icono de Applescript permanece abierto mientras la aplicación esté abierta. Presumiblemente, usar el comando Applescript open
evitaría esto, pero como no estoy ejecutando la aplicación ya que está empaquetada (solo /Applications/Firefox
), no funciona.
Entonces, ¿hay una mejor manera de ejecutar aplicaciones con argumentos de línea de comandos? Si no es así, ¿hay alguna manera de evitar que una sesión de terminal persistente o el icono de Applescript permanezcan abiertos mientras la aplicación está abierta?
Editar
Según una página de Mozilla Wiki , es mejor usar un script para ejecutar la aplicación con argumentos. Agregar un &
al final del script mata la ventana de Terminal persistente. La única molestia ahora es que abre una ventana de Terminal muerta y desconectada (que es mejor que la persistente, pero aún así ...)
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
fuente
&
él todavía pertenece a la Terminal, puede arreglarlo agregando la líneadisown %/Applications/Firefox.app/Contents/MacOS/firefox
después de ejecutarlo, luego puede cerrar la Terminal de manera segura, utilizando AppleScript.Respuestas:
Aquí está mi mejor solución: crear un Applescript con:
Y guárdelo como una aplicación .
Puede poner cualquier aplicación con cualquier argumento en la primera parte. La parte posterior a la
&
necesidad de matar lo que sea que haya llamado su script + .app. Verá que la aplicación de script parpadea en el muelle, pero luego desaparecerá.Nota: La secuencia de comandos no funcionará correctamente cuando se ejecute desde el Editor de secuencias de comandos, solo cuando se ejecute desde la aplicación de secuencia de comandos que ha creado.
fuente
A partir de OS X 10.6.2, el comando de apertura puede pasar argumentos a la aplicación que abre mediante el indicador --args. Un AppleScript para usar se ve así:
Eso debería darte todo el comportamiento que deseas.
fuente
--args
con Chrome y no funciona. Solo funcionará para la primera instancia . Si intenta ejecutar dos--user-data-dir
simultáneamente, no puede hacerlo,open
pero debe ejecutarlo con el/applications...
método anterior. Alguien sabe por qué mierda--args
no funciona?Abra Automator y cree una aplicación con una sola acción Ejecutar script de Shell :
Esta aplicación iniciará Firefox y se cerrará instantáneamente, dejando solo Firefox ejecutándose.
Alternativamente, cree una aplicación usando el Editor AppleScript con el siguiente código AppleScript:
Ambos funcionan bien y no mantienen ni Terminal ni una aplicación de script ejecutándose durante más de un segundo más o menos. Con Automator, incluso puede crear un Servicio si así lo elige.
fuente
open --args
se implementó en 10.6.2, como ya mencionó Bob.open eclipse.app -n
para abrir un segundo espacio de trabajo de Eclipse. Muy útil. ¡Gracias!Esta es una discusión antigua, pero aún aparece en las búsquedas de Google, así que pensé en agregar un par de ¢.
Probablemente sea mejor usar un "identificador de paquete" en lugar de una ruta absoluta al ejecutable:
O en un script de Apple:
Lo que aún no he descubierto es cómo abrir una nueva instancia / ventana con un perfil diferente una vez que el primero ya está abierto. (Si ejecuto el AppleScript anterior, luego otro con "Perfil 2", Chrome seguirá abriendo otra ventana como "Perfil 1"). :(
fuente
No es necesario (como han sugerido algunas otras respuestas) usar killall (o similar) para eliminar el proceso de aplicación AppleScript principal ("applet") en este escenario. Incluso puede tener efectos secundarios adversos si el nombre / patrón dado a killall coincide con algo más que el proceso de applet principal (por ejemplo, otros, ejecutando simultáneamente aplicaciones AppleScript (si se usa "applet" como patrón).
Algo así
kill $PPID
podría ser más razonable, pero es posible que no queramos asumir que el applet de una aplicación AppleScript es siempre el padre inmediato del shell iniciado por do shell script . Afortunadamente, hay una manera perfectamente razonable de hacer lo que necesita.Según TN2065 (en "Quiero iniciar un proceso de servidor en segundo plano; ¿cómo hago para que el script de shell no espere hasta que se complete el comando?"), El método adecuado es redirigir stdout y stderr y hacer que el shell ejecute el programa en segundo plano .
Use Script Editor para guardar el siguiente programa como una aplicación AppleScript:
(saltos de línea funcionales agregados para mantenerlo "estrecho"; elimine el
¬
y\\
y colóquelo todo en una línea larga si lo desea)Funcionará lo suficiente como para iniciar Firefox y saldrá limpiamente mientras Firefox continúa ejecutándose.
La redirección es necesaria porque el script de shell no solo espera a que salga su elemento secundario inmediato (el shell), sino que también espera (todos los casos de) los extremos grabables de las tuberías que crea para que stdout y stderr del shell se cierren . Los programas que ejecuta sin redireccionamiento heredan el stdout y el stderr ( hacer las canalizaciones del script de shell ) (incluso los que se ejecutan en segundo plano con
&
); La redirección asegura que el caparazón sea el último en sujetar los extremos grabables de las tuberías. Por lo tanto, el script do shell volverá inmediatamente después de que el shell salga, permitiendo que la aplicación AppleScript salga (ya que el script do shell es la última expresión en el programa AppleScript).Las otras respuestas que usan open inside hacen el trabajo de script de shell porque open (en realidad LaunchServices) hace el trabajo equivalente de poner en segundo plano el programa resultante y enviar su stdout y stderr a otra parte.
fuente
open --args
ve más limpio. ¿Hay algún inconveniente en usar alguno de ellos?open --args
probablemente esté bien.AppleScript
Dos puntos allí.
Sin embargo, funciona bien en 10.6.5
fuente
applet
¿se refiere a?Lo siguiente debería permitirle especificar argumentos de línea de comandos para el propio .app:
Haga clic con el botón derecho en el paquete .app, seleccione "Mostrar contenido del paquete", navegue a Info.plist, haga doble clic en él, busque la clave Args, edite.
No tengo una máquina con OS X a mano en este momento, por lo que no puedo comprobar si también puedes hacer esto con un alias (si querías mantener el .app original libre de argumentos, etc.).
fuente
Envuelva su aplicación dentro de un lanzador AppleScript.
Aquí están los pasos.
Cree un AppleScript con el siguiente contenido y guárdelo como una aplicación (en este ejemplo se llama "Firefox 3 launcher.app").
Llegué a esa aplicación en el Finder, haga clic con el botón derecho y muestre el contenido del paquete.
Coloque su aplicación en la raíz del contenido del paquete. (En este ejemplo sería "Firefox 3.app")
Resultado: / Aplicaciones / Firefox 3 launcher.app/Firefox 3.app
Ahora puede abrir su iniciador de aplicaciones.
Notas:
fuente
¿Por qué no usas:
Simple pero funciona.
fuente
El
open
comando tiene un--args
argumento opcional cuyo valor se pasará a la aplicación abierta como argumentos. Por ejemplo:fuente