Öffnen Sie die Anwendung vom Terminal und bleiben Sie mit dem Prozess verbunden (wie Linux), sodass die Anwendung auch geschlossen wird, wenn STRG + C an das Terminal gesendet wird

Ich habe eine Anwendung (Closed-Source-Tool, das nicht von mir entwickelt wurde), für die ein anderer Prozess vorhanden sein muss, bevor sie ordnungsgemäß ausgeführt werden kann. Wenn ich diese Anwendung beende, möchte ich auch, dass dieser benutzerdefinierte Prozess beendet wird. Meine Lösung besteht darin, ein Shell-Skript "Launcher" zu haben. Ich kann das Erstellen von Shell-Skriptmenüs, das On-Close-Ereignis und das Öffnen/Beenden der Prozesse handhaben. Das Problem ist, dass ich anscheinend nicht herausfinden kann, wie man eine Anwendung über Terminal öffnet, aber Terminal für diese Anwendung gesperrt hält, sodass die Anwendung geschlossen wird, wenn ich das Terminalfenster schließe oder STRG + C sende. Wenn Sie mit Linux vertraut sind, ist ein einfaches Beispiel für mein gewünschtes Verhalten nur "gedit file.txt". Der Texteditor würde sich öffnen, aber er lebt nur so lange wie das Terminalfenster.

Unter OSX kann ich mit dem Befehl "Öffnen" Anwendungen starten, aber sie sind nicht mit dem Terminalfenster verknüpft. Gibt es einen alternativen Befehl, den ich verwenden sollte, um dieses Verhalten zu erreichen?

Hier mein bisheriges Skript:

#!/bin/bash
set -e
function cleanup {
    osascript -e 'tell application "APP1" to quit'
    osascript -e 'tell application "APP2" to quit'
}
trap cleanup EXIT

clear

PS3='Please select an option: '
options=("Start Apps" "Stop Apps")
select opt in "${options[@]}"
do
    case $opt in
        "Start Apps")
            open -a "APP1"
            open -a "APP2"
            ;;
        "Stop Apps")
            cleanup 
            ;;
        *) echo invalid option;;
    esac
done
Linux und OS X funktionieren gleich - das Problem hier ist die Verwendung von open, das in einem Nicht-Unterprozess geöffnet wird - rufen Sie den Befehl direkt als ausführbare Unix-Datei auf - Dies ist jedoch nicht der beste Weg, auch wenn Ihre erste App den Hintergrund forken und dann töten sollte Das Terminal füllt die erste App, die die Hintergrund-App beendet, da es sich um Unterprozesse handelt, oder die Hintergrund-App zu einem Daemon macht
Anstatt offen zu verwenden. Sie können die ausführbare Datei der Anwendungen ausführen./Applications/TextEdit.app/Contents/MacOS/TextEdit
Danke Leute! @markhunte antworte darauf und ich akzeptiere es! Das war genau das, was ich brauchte.
OK. Antwort hinzugefügt

Antworten (1)

Anstatt den Unix-Befehl open zu verwenden.

Sie können die ausführbare Datei der Anwendungen direkt ausführen.

Zum Beispiel für TextEdit.app

Ausführen des Befehls in Terminal.app

/Applications/TextEdit.app/Contents/MacOS/TextEdit

Dadurch wird TextEdit mit einem Prozess von Terminal.app geöffnet

Wenn Sie das Terminalfenster schließen oder Ctrl + verwendenC

TextEdit wird beendet.