Ich starte Anwendungen vom Terminal aus mit Befehlen wie diesem:
/Applications/Mail.app/Contents/MacOS/Mail &
Der wichtige Teil ist die &
.
Für Unix/Linux/Solaris:
&
das Programm von alleine leben lässt.xeyes &
und das Programm sicher ausgeführt zu haben, selbst nachdem ich die Shell geschlossen habe.Unter Mac OS X (in Unix):
&
und schließe das Terminalfenster: Die Anwendung wird beendet!Die "Standard"-Methode, um das zu erreichen, was Sie erreichen möchten (sowohl unter OS X als auch unter Linux, FreeBSD oder anderen Systemen), besteht darin, den Befehl zu verwenden nohup
:
nohup program &
Dies startet program
, das aufgrund des &
- im Hintergrund relativ zur Shell ausgeführt wird, und ignoriert Auflegesignale aufgrund des nohup-Befehls.
Auf diese Weise wird das Programm weiter ausgeführt, obwohl Sie die Shell schließen. Es spielt keine Rolle, ob Sie die Shell schließen, weil Sie Terminal.app schließen, oder ob Sie die Shell schließen, weil Sie eine SSH-Verbindung zum Computer oder ähnliches trennen.
nohup.out
im aktuellen Ordner erstellt. Auch wenn es nichts zu schreiben gibt. Nach ein paar Wochen hatte ich nohup.out
überall Dateien auf meinem Mac. :-(nohup command>/dev/null&
oder command&disown
.Wenn Sie ein Terminalfenster schließen, sendet es ein SIGHUP (Auflegesignal) an die Shell, die dann SIGHUP an alle von ihr gestarteten Prozesse sendet . Dies ist ein traditionelles Verhalten für Bash und viele andere Shells, und die traditionelle Lösung dafür ist die Verwendung von nohup.
Es gibt Möglichkeiten, wie sich verschiedene Unix-Rechner unterscheiden können, daher ist es möglich, dass sich die von Ihnen verwendeten spezifischen Terminalemulatoren oder die von Ihnen verwendeten spezifischen Shells unterschiedlich verhalten haben. Aber es ist nicht spezifisch für OS X. Zum Beispiel gibt es eine Frage zu demselben Problem auf Ubuntu.
Mit dem kaufmännischen Und " &
" weisen Sie Terminal an, den Prozess im Hintergrund der Shell selbst auszuführen. Wenn Sie also die Shell schließen (und den Prozess beenden), wird die GUI (Mail.app selbst) ebenfalls geschlossen.
Der richtige Befehl zum Starten von Mail vom Terminal aus lautet einfach:
open -a Mail; exit
Bearbeiten: Ich habe das gerade bei U & L Stack Exchange gefunden: Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile? Die bereitgestellten Antworten sind ausgezeichnet und erklären genau, was vor sich geht, detaillierter und besser als ich es jemals könnte! Ich empfehle dringend, es durchzulesen.
/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
, sondern in einem bestimmten Pfad befindet? So was :/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
Dies startet Mail. Aber: Dies beendet mein Terminalfenster. Und dies öffnet ein neues Terminalfenster. Und wenn ich das neue Terminalfenster schließe, wird Mail unerwünschterweise beendet! Zurück zu Feld 1.open -a Applications/Mail.app/Contents/MacOS/Mail; exit
/
. Aber es beendet mein Terminalfenster.Ich habe die Lösung gefunden:
(/Applications/Mail.app/Contents/MacOS/Mail &)
Es ist einfach, es ist hübsch und es funktioniert!
Die Klammern ( )
starten den Befehl in einer Sub-Shell.
@jksoegaard hat die richtigen Befehle, aber wie Sie im Kommentar erwähnt haben, wird eine nohup.out-Datei erstellt. Um zu verhindern, dass die Datei nohup.out erstellt wird, müssen Sie STDOUT und STDERR an eine andere Stelle umleiten. Der vollständige Befehl wäre nohup program &>/dev/null &
. Dadurch wird Ihr Programm im Hintergrund ausgeführt, das SIGHUP ignoriert und alle STDOUT- und STDERR-Daten an /dev/null gesendet.
Wenn Sie jedoch nicht daran gedacht haben, nohup hinzuzufügen (wie in Ihrer ursprünglichen Frage), können Sie den disown -arh
Befehl verwenden, um alle im Hintergrund ausgeführten Jobs zu markieren, um das SIGHUP zu ignorieren.
Oder Sie können es versuchenopen -a /Applications/Mail.app
Verwendung: open [-e] [-t] [-f] [-W] [-R] [-n] [-g] [-h] [-s ][-b ] [-a ] [Dateinamen] [--args Argumente] Hilfe: Öffnen öffnet Dateien aus einer Shell. Öffnet standardmäßig jede Datei mit der Standardanwendung für diese Datei. Wenn die Datei in Form einer URL vorliegt, wird die Datei als URL geöffnet. Optionen: -a Öffnet mit der angegebenen Anwendung. -b Öffnet mit der angegebenen Anwendungspaket-ID. -e Öffnet mit TextEdit. -t Öffnet mit Standard-Texteditor. -f Liest Eingaben von der Standardeingabe und öffnet mit TextEdit. -F --fresh Startet die App neu, d. h. ohne Wiederherstellung von Windows. Der gespeicherte dauerhafte Zustand geht verloren, mit Ausnahme von unbenannten Dokumenten. -R, --reveal Wählt im Finder aus, anstatt ihn zu öffnen. -W, --wait-apps Blockiert, bis die verwendeten Anwendungen geschlossen werden (auch wenn sie bereits ausgeführt wurden). --args Alle verbleibenden Argumente werden in argv an die main()-Funktion der Anwendung übergeben, anstatt geöffnet zu werden. -n, --new Öffnet eine neue Instanz der Anwendung, auch wenn bereits eine ausgeführt wird. -j, --hide Startet die App versteckt. -g, --background Bringt die Anwendung nicht in den Vordergrund. -h, --header Durchsucht Speicherorte von Header-Dateien nach Headern, die mit den angegebenen Dateinamen übereinstimmen, und öffnet sie. -s Für -h das zu verwendende SDK; falls angegeben, werden nur SDKs durchsucht, deren Namen den Argumentwert enthalten. Andernfalls wird das SDK mit der höchsten Version auf jeder Plattform verwendet.
Ich habe eine Lösung gefunden: Böses mit Bösem bekämpfen.
Ich starte meine App mit dieser Art von Befehl:
/Applications/Mail.app/Contents/MacOS/Mail & exit
Die Shell wird sofort beendet. Und die App überlebt, auch nachdem ich das Terminalfenster geschlossen habe.
Aber diese Lösung ist nicht sehr praktisch.
/Applications
, und nicht mit meinem Mac gebündelt sind..app
Ordner werden "Bundles" genannt, und der open
Befehl kann sie starten, unabhängig davon, ob sie sich im /Applications
Ordner oder in einem anderen Ordner befinden. Der Begriff „Bundle“ bedeutet in diesem Zusammenhang nicht „mit OS X geliefert“.
Erich3