Закройте все окна Mac Terminal, кроме того, в котором запущен скрипт.

Закройте все окна Mac Terminal, кроме того, в котором запущен скрипт.

Я пытаюсь создать скрипт оболочки, который запускает программирование симуляции Python в 4 терминальных окнах. У меня есть скрипт, который запускает программу четыре раза в четырех отдельных терминальных окнах (всего 5 окон, 4 для программ Python и одно для управления другими терминальными окнами). Теперь я хочу создать скрипт, который я могу запустить в контрольном окне терминала, который закроет и остановит программы в других четырех терминальных окнах, но при этом контрольное окно останется открытым.

У меня пока получилось что-то вроде этого

#!/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'

Проблема в том, что последняя строка не работает, потому что она закрывает все окна, включая то, в котором выполняется скрипт. Я не очень хорошо знаком с shell или apple script, поэтому любая помощь приветствуется. Я разместил сообщение на Stack, но я думаю, что это может быть лучшим местом для вопроса типа автоматизации. Спасибо

решение1

Вы можете назначить идентификатор окна "Main" переменной, а затем в конце скрипта закрыть все окна, идентификатор которых не совпадает с идентификатором окна "Main". Часть AppleScript может быть примерно такой:

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

РЕДАКТИРОВАТЬ

#!/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'

решение2

Если окно, в котором запущен скрипт, находится на переднем плане, а Терминал не запрашивает подтверждение при закрытии других окон, вы можете попробовать что-то вроде этого.

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

Связанный контент