Je lance des applications depuis le terminal avec des commandes comme celle-ci:
/Applications/Mail.app/Contents/MacOS/Mail &
La partie importante est la &
.
Pour Unix / Linux / Solaris:
- J'ai appris à l'école qu'en ajoutant
&
le programme, le programme se vit tout seul. - Je me souviens fortement d'avoir lancé une commande comme
xeyes &
et d'avoir exécuté le programme en toute sécurité même après avoir fermé le shell.
- J'ai appris à l'école qu'en ajoutant
Sous Mac OS X (Unix à l'intérieur):
- Je lance une application avec
&
et je ferme la fenêtre Terminal: l'application se ferme! - Pourquoi ce comportement indésirable se produit-il sur Mac OS X?
- Comment résoudre ce problème?
- Je lance une application avec
macos
terminal
applications
command-line
unix
Nicolas Barbulesco
la source
la source
Réponses:
La façon "standard" d'accomplir ce que vous voulez accomplir (sur OS X ainsi que sur Linux, FreeBSD ou d'autres systèmes) est d'utiliser la commande
nohup
:Cela démarrera
program
, qui s'exécutera en arrière-plan par rapport au shell à cause du&
- et ignorera les signaux de raccrochage dus à la commande nohup.De cette façon, le programme continuera à s'exécuter même si vous fermez le shell. Peu importe si vous fermez le shell parce que vous fermez Terminal.app, ou si vous fermez le shell parce que vous vous déconnectez d'une connexion ssh à l'ordinateur, ou similaire.
la source
nohup.out
dans le dossier actuel. Même quand il n'y a rien à écrire. Après quelques semaines, j'aurais des fichiersnohup.out
partout sur mon Mac. :-(nohup command>/dev/null&
oucommand&disown
.Lorsque vous fermez une fenêtre de terminal, il envoie un SIGHUP (signal de raccrochage) au shell, qui envoie ensuite SIGHUP à tous les processus qu'il a démarrés . Il s'agit d'un comportement traditionnel pour bash et de nombreux autres shells, et la solution traditionnelle consiste à utiliser nohup.
Il existe différentes manières dont différentes machines Unix peuvent différer, il est donc possible que les émulateurs de terminaux spécifiques que vous avez utilisés ou les shells spécifiques que vous avez utilisés se soient comportés différemment. Mais ce n'est pas spécifique à OS X. Par exemple, il y a une question sur ce même problème sur Ubuntu.
la source
À l'aide de l'esperluette "
&
", vous dites à Terminal d'exécuter le processus en arrière-plan du shell lui-même. Ainsi, lorsque vous fermez le shell (et tuez le processus), l'interface graphique (Mail.app elle-même) se ferme également.La commande correcte pour lancer Mail depuis le terminal est simplement:
Edit: Je viens de trouver ceci sur U&L Stack Exchange: Que signifie esperluette à la fin d'une ligne de script shell? Les réponses fournies sont excellentes et expliquent exactement ce qui se passe plus en détail et mieux que jamais! Je recommande fortement de le lire.
la source
/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
, mais à un chemin spécifique? Comme ça:/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 a les commandes appropriées mais comme vous l'avez mentionné dans le commentaire, il crée un fichier nohup.out. Pour arrêter la création du fichier nohup.out, vous devez rediriger STDOUT et STDERR ailleurs. La commande complète serait
nohup program &>/dev/null &
. Cela exécutera votre programme en arrière-plan, ignorant le SIGHUP et envoyant tous les STDOUT et STDERR vers / dev / null.Cependant, si vous ne vous êtes pas souvenu d'ajouter nohup (comme dans votre question d'origine), vous pouvez utiliser la
disown -arh
commande pour marquer tous les travaux en cours en arrière-plan pour ignorer SIGHUP.la source
J'ai trouvé la solution :
(/Applications/Mail.app/Contents/MacOS/Mail &)
C'est simple, c'est joli, et ça marche!
Les parenthèses
( )
lancent la commande dans un sous-shell.la source
Ou vous pouvez essayer
open -a /Applications/Mail.app
la source
J'ai trouvé une solution: combattre le mal par le mal.
Je lance mon application avec ce genre de commande:
/Applications/Mail.app/Contents/MacOS/Mail & exit
L'obus sort immédiatement. Et l'application survit, même après avoir fermé la fenêtre du terminal.
Mais cette solution n'est pas très pratique.
la source
/Applications
et non fournies avec mon Mac..app
les dossiers sont appelés "ensembles" et laopen
commande peut les lancer, qu'ils se trouvent dans le/Applications
dossier ou dans tout autre dossier. Le terme «bundle» dans ce contexte ne signifie pas «livré avec OS X».