Lanzo aplicaciones desde la Terminal con comandos como este:
/Applications/Mail.app/Contents/MacOS/Mail &
La parte importante es la &
.
Para Unix/Linux/Solaris:
&
hace que el programa viva por sí solo.xeyes &
y tener el programa funcionando de manera segura incluso después de cerrar el shell.En Mac OS X (Unix dentro):
&
y cierro la ventana de Terminal: ¡la aplicación sale!La forma "estándar" de lograr lo que desea lograr (tanto en OS X como en Linux, FreeBSD u otros sistemas) es usar el comando nohup
:
nohup program &
Esto comenzará program
, que se ejecutará en segundo plano en relación con el shell debido a &
- e ignorará las señales de colgado debido al comando nohup.
De esta manera, el programa continuará ejecutándose aunque cierre el shell. No importa si está cerrando el shell porque está cerrando Terminal.app, o si está cerrando el shell porque se está desconectando de una conexión ssh a la computadora, o similar.
nohup.out
en la carpeta actual. Incluso cuando no hay nada que escribir. Después de algunas semanas, tendría archivos nohup.out
por todas partes en mi Mac. :-(nohup command>/dev/null&
o command&disown
.Cuando cierra una ventana de terminal, envía un SIGHUP (señal de colgar) al shell, que luego envía SIGHUP a todos los procesos que inició . Este es el comportamiento tradicional de bash y muchos otros shells, y la solución tradicional a esto es usar nohup.
Hay formas en que las diferentes máquinas Unix pueden diferir, por lo que es posible que los emuladores de terminal específicos que usó o los shells específicos que usó se comportaron de manera diferente. Pero no es específico de OS X. Por ejemplo, hay una pregunta sobre este mismo problema en Ubuntu.
Usando el signo " &
", le está diciendo a la Terminal que ejecute el proceso en segundo plano del propio shell. Por lo tanto, cuando cierre el shell (y elimine el proceso), la GUI (Mail.app en sí) también se cerrará.
El comando correcto para iniciar Mail desde la terminal es simplemente:
open -a Mail; exit
Editar: Acabo de encontrar esto en U&L Stack Exchange: ¿Qué significa ampersand al final de una línea de script de Shell? ¡Las respuestas proporcionadas son excelentes y explican exactamente lo que está sucediendo con más detalle y mejor que nunca! Recomiendo encarecidamente leerlo.
/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
/Applications
, sino en una ruta específica? Me gusta esto :/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
open /Applications/Mail.app/Contents/MacOS/Mail ; exit
Esto inicia Mail. Pero: Esto termina mi ventana de Terminal. Y esto abre una nueva ventana de Terminal. Y, cuando cierro la nueva ventana de Terminal, Mail sale indeseablemente. Vuelta al cuadrado 1.open -a Applications/Mail.app/Contents/MacOS/Mail; exit
/
. Pero termina mi ventana de Terminal.He encontrado la solución :
(/Applications/Mail.app/Contents/MacOS/Mail &)
¡Es simple, es bonito y funciona!
Los paréntesis ( )
inician el comando en una subcapa.
@jksoegaard tiene los comandos adecuados, pero como mencionaste en el comentario, crea un archivo nohup.out. Para detener la creación del archivo nohup.out, debe redirigir STDOUT y STDERR a otro lugar. El comando completo sería nohup program &>/dev/null &
. Esto ejecutará su programa en segundo plano, ignorando el SIGHUP y enviando todo STDOUT y STDERR a /dev/null.
Sin embargo, si no recordó agregar nohup (como en su pregunta original), puede usar el disown -arh
comando para marcar todos los trabajos en ejecución en segundo plano para ignorar el SIGHUP.
o puedes probaropen -a /Applications/Mail.app
Uso: abrir [-e] [-t] [-f] [-W] [-R] [-n] [-g] [-h] [-s ][-b ] [-a ] [nombres de archivo] [--argumentos argumentos] Ayuda: Abrir abre archivos desde un shell. De manera predeterminada, abre cada archivo usando la aplicación predeterminada para ese archivo. Si el archivo tiene la forma de una URL, el archivo se abrirá como una URL. Opciones: -a Se abre con la aplicación especificada. -b Se abre con el identificador de paquete de aplicación especificado. -e Se abre con TextEdit. -t Se abre con el editor de texto predeterminado. -f Lee la entrada desde la entrada estándar y se abre con TextEdit. -F --fresh Inicia la aplicación desde cero, es decir, sin restaurar Windows. Se pierde el estado persistente guardado, excepto los documentos sin título. -R, --reveal Selecciona en el Finder en lugar de abrir. -W, --wait-apps Bloquea hasta que se cierran las aplicaciones utilizadas (incluso si ya se estaban ejecutando). --args Todos los argumentos restantes se pasan en argv a la función main() de la aplicación en lugar de abrirse. -n, --new Abre una nueva instancia de la aplicación incluso si ya se está ejecutando. -j, --hide Inicia la aplicación oculta. -g, --background No trae la aplicación al primer plano. -h, --header Busca ubicaciones de archivos de encabezado para encabezados que coincidan con los nombres de archivo dados y los abre. -s Para -h, el SDK a usar; si se proporciona, solo se buscan los SDK cuyos nombres contienen el valor del argumento. De lo contrario, se utiliza el SDK con la versión más alta en cada plataforma.
He encontrado una solución: combatir el mal con el mal.
Lanzo mi aplicación con este tipo de comando:
/Applications/Mail.app/Contents/MacOS/Mail & exit
El caparazón sale de inmediato. Y la aplicación sobrevive, incluso después de cerrar la ventana de Terminal.
Pero esta solución no es muy útil.
/Applications
, y no incluidas en mi Mac..app
Las carpetas se denominan "paquetes" y el open
comando puede iniciarlas ya sea que estén en la /Applications
carpeta o en cualquier otra carpeta. El término "paquete" en este contexto no significa "enviado con OS X".
Eric3