Schließen Sie alle Mac-Terminalfenster außer dem, in dem ein Skript ausgeführt wird.

Schließen Sie alle Mac-Terminalfenster außer dem, in dem ein Skript ausgeführt wird.

Ich versuche, ein Shell-Skript zu erstellen, das eine Python-Simulationsprogrammierung in 4 Terminalfenstern ausführt. Ich habe das Skript, das das Programm viermal in vier separaten Terminalfenstern startet (insgesamt 5 Fenster, 4 für die Python-Programme und eines zur Steuerung der anderen Terminalfenster). Ich möchte jetzt ein Skript erstellen, das ich im Steuerterminalfenster ausführen kann, das die Programme der anderen vier Terminalfenster schließt und beendet, das Steuerterminalfenster aber weiterhin geöffnet lässt.

Was ich bisher habe, ist so etwas wie das hier

#!/bin/sh

osascript -e 'tell app "Terminal" 
do script "killall python"
end tell'
osascript -e 'tell app "Terminal" to quit'
osascript -e 'tell app "Terminal" to open'

Das Problem ist, dass die letzte Zeile nicht funktioniert, da sie alle Fenster schließt, einschließlich des Fensters, in dem das Skript ausgeführt wird. Ich kenne mich mit Shell- oder Apple-Skripten nicht so gut aus, daher wäre ich für jede Hilfe dankbar. Ich habe auf Stack gepostet, aber ich denke, dies hier ist der bessere Ort für eine Frage zur Automatisierung. Danke

Antwort1

Sie können die ID des „Haupt“-Fensters einer Variablen zuweisen und dann am Ende des Skripts alle Fenster schließen, deren ID nicht mit der des „Haupt“-Fensters übereinstimmt. Der AppleScript-Teil kann etwa so aussehen:

tell application "Terminal"
    set mainID to id of front window
    -- insert your code
    close (every window whose id ≠ mainID)
end tell

BEARBEITEN

#!/bin/sh

killall python

osascript -e 'tell application "Terminal"' -e 'set mainID to id of front window' -e 'close (every window whose id ≠ mainID)' -e 'end tell'

Antwort2

Wenn das Fenster, in dem das Skript ausgeführt wird, ganz vorne steht und Terminal beim Schließen der anderen Fenster keine Bestätigung verlangt, können Sie Folgendes versuchen.

tell application "Terminal"
    close rest of (get windows)
end tell

verwandte Informationen