Я пытаюсь создать скрипт оболочки, который запускает программирование симуляции 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