Lanzo aplicaciones desde la Terminal con comandos como este:
/Applications/Mail.app/Contents/MacOS/Mail &
La parte importante es la &.
Para Unix / Linux / Solaris:
- Aprendí en la escuela que agregar
&el programa hace que el programa viva solo. - Recuerdo haber lanzado un comando como
xeyes &y hacer que el programa se ejecute de manera segura incluso después de cerrar el shell.
- Aprendí en la escuela que agregar
En Mac OS X (Unix dentro):
- Lanzo una aplicación con
&y cierro la ventana de Terminal: ¡la aplicación se cierra! - ¿Por qué ocurre este comportamiento indeseable en Mac OS X?
- Cómo se puede arreglar esto ?
- Lanzo una aplicación con
macos
terminal
applications
command-line
unix
Nicolas Barbulesco
fuente
fuente

Respuestas:
La forma "estándar" de lograr lo que desea lograr (en OS X, así como en Linux, FreeBSD u otros sistemas) es usar el comando
nohup:Esto comenzará
program, que se ejecutará en segundo plano en relación con el shell debido a&- e ignorará las señales de bloqueo debido al comando nohup.De esta manera, el programa seguirá 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.
fuente
nohup.outen la carpeta actual. Incluso cuando no hay nada que escribir. Después de algunas semanas, tendría archivosnohup.outen todas partes en mi Mac. :-(nohup command>/dev/null&ocommand&disown.Cuando cierra una ventana de terminal, envía un SIGHUP (señal de bloqueo) al shell, que luego envía SIGHUP a todos los procesos que inició . Este es el comportamiento tradicional para bash y muchos otros shells, y la solución tradicional para esto es usar nohup.
Hay diferentes maneras en que las diferentes máquinas Unix pueden diferir, por lo que es posible que los emuladores de terminal específicos que utilizó o los shells específicos que utilizó se comportaron de manera diferente. Pero no es específico para OS X. Por ejemplo, hay una pregunta sobre este mismo problema en Ubuntu.
fuente
Usando el signo "
&", le está diciendo a Terminal que ejecute el proceso en el fondo del shell. Por lo tanto, cuando cierra el shell (y elimina el proceso), también se cerrará la GUI (Mail.app).El comando correcto para iniciar Mail desde la terminal es simplemente:
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 leerlo.
fuente
/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? Así:/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 -a Applications/Mail.app/Contents/MacOS/Mail; exit@jksoegaard tiene los comandos adecuados, pero como mencionó en el comentario, crea un archivo nohup.out. Para evitar que se cree el 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 SIGHUP y enviando todo STDOUT y STDERR a / dev / null.Sin embargo, si no recuerda agregar nohup (como en su pregunta original), puede usar el
disown -arhcomando para marcar todos los trabajos en ejecución en segundo plano para ignorar el SIGHUP.fuente
He encontrado la solución :
(/Applications/Mail.app/Contents/MacOS/Mail &)¡Es simple, es bonito y funciona!
Los paréntesis
( )inician el comando en un sub-shell.fuente
O puedes intentar
open -a /Applications/Mail.appUso: abierto [-e] [-t] [-f] [-W] [-R] [-n] [-g] [-h] [-s] [- b] [-a] [nombres de archivo] [--argumentos argumentos] Ayuda: Abrir abre archivos desde un shell. Por defecto, 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 de la entrada estándar y se abre con TextEdit. -F --fresh Inicia la aplicación fresca, es decir, sin restaurar ventanas. El estado persistente guardado se pierde, excluyendo los documentos sin título. -R, --reveal Selecciona en el Finder en lugar de abrirlo. -W, --wait-apps Bloquea hasta que se cierren 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 en las ubicaciones de los archivos de encabezado los encabezados que coinciden 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.fuente
He encontrado una solución: luchar contra el mal con el mal.
Lanzo mi aplicación con este tipo de comando:
/Applications/Mail.app/Contents/MacOS/Mail & exitLa cáscara sale a la vez. Y la aplicación sobrevive, incluso después de cerrar la ventana de Terminal.
Pero esta solución no es muy útil.
fuente
/Applications, y no incluidas en mi Mac..appLas carpetas se denominan "paquetes" y elopencomando puede iniciarlas tanto si están en la/Applicationscarpeta como en cualquier otra carpeta. El término "paquete" en este contexto no significa "enviado con OS X".