Назад | Перейти на главную страницу

Как запустить команды терминала на нескольких вкладках?

Есть ли способ с помощью 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

Я надеюсь, что это сделает чью-то жизнь немного интереснее автоматизированный :)