Есть ли способ с помощью Applescript запускать несколько вкладок в Терминале и выполнять команды против них?
У меня есть проект, который требует, чтобы я запускал несколько служб в Терминале для одновременного запуска и мониторинга, и я хотел бы автоматизировать этот процесс запуска.
iTerm имеет хорошая поддержка скриптов. AFP 548 содержит пример, открывает несколько сеансов ssh на разных вкладках. [Я подозреваю, что это будет проще и надежнее, чем создание сценариев с графическим интерфейсом.]
Похоже, вы можете использовать сценарии графического интерфейса. (Я ожидал, что смогу создавать новые вкладки, не прибегая к сценариям графического интерфейса, поскольку словарь Терминала знает вкладки как элементы окон. Однако, очевидно, сломанные.) Как и в случае с ответом Chealion, доступ для вспомогательных устройств должен быть включен, но Apple предоставляет сценарий, который позволяет вам проверить, что он здесь.
http://www.apple.com/applescript/uiscripting/
Мэтью Ламби приводит пример использования сценария графического интерфейса пользователя AppleScript для создания вкладок в Terminal.app здесь:
http://lambie.org/2007/11/03/tabs-in-terminal-using-applescript-on-leopard/
Этот ответ был бы лучше в качестве комментария к ответу Chealion, но у меня пока нет представителя, чтобы комментировать.
Один из вариантов - использовать системные события для отправки нажатия клавиши, необходимой для создания новой вкладки, но ограничение состоит в том, что вспомогательные устройства в универсальном доступе должен быть включенным, и может потребоваться добавление задержки прицела.
tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
Насколько я могу судить из словаря сценариев терминала - вы можете получать информацию только из вкладок, но не создавать новые, как в случае с окнами (например, Run do script "clear"
Я не уверен, как получить вкладки, но это откроет вам несколько окон:
set commands to {"ls", "pwd", "cd /tmp; ls"}
repeat with com in commands
tell application "Terminal"
activate
do script with command com
end tell
end repeat
Я знаю, что вы просили терминал, но на самом деле - вы должны использовать iTerm :-)
Это из сценария, написанного коллегой по iTerm:
#!/bin/sh
osascript <<-eof
tell application "iTerm"
set myterm to (make new terminal)
tell myterm
launch session "Default session"
tell the last session
set name to "Server"
write text "cd \"$PROJECT_DIR\""
write text "script/server"
end tell
launch session "Default session"
tell the last session
set name to "Console"
write text "cd \"$PROJECT_DIR\""
write text "script/console"
end tell
end tell
end tell
eof
Он запускает новое окно iTerm с несколькими вкладками и выполняет в них несколько небольших команд (для разработки на Rails).
Я создал сценарий, позволяющий создавать новые вкладки и заголовки из того же окна Terminal.app, используя new_tab(title, command)
функция оболочки, которая в основном охватывает все сценарии Apple.
Мою статью с кодом и предысторию можно найти здесь: Программное создание вкладок и заголовков в Mac OS X Terminal.app
Я надеюсь, что это сделает чью-то жизнь немного интереснее автоматизированный :)