Открыть терминал из кода ruby? - PullRequest
7 голосов
/ 20 июня 2011

Существуют ли системные библиотеки, которые позволят мне открывать группы терминалов (как вкладки, а не несколько окон) из ruby? Я не хочу использовать метод exec (), чтобы открыть приложение терминала ... Например, я использую около 5 различных терминалов в моей среде (mongodb, redis, daemons и т. Д.) И хочу написать скрипт, который откроет эту группу окон и выполнит команды для запуска всех этих процессов. Есть идеи? Я думаю, что смогу сделать это только с Objective-C или MacRuby.

Ответы [ 6 ]

4 голосов
/ 20 июня 2011

Терминатор gem делает в точности то, что вы хотите, и использует скрытый сценарий rb-appscript.

4 голосов
/ 20 июня 2011

Лично я бы сказал, что забудьте про Ruby, просто скрипт tmux :

http://onethingwell.org/post/455644179/tmux

Пример из поста выше:

#!/bin/sh
tmux new-session -d -s main
tmux new-window -t main:1 alpine
tmux rename-window -t main:1 mail
tmux new-window -t main:2 'newsbeuter -r'
tmux rename-window -t main:2 news
tmux select-window -t main:0
tmux attach -t main
1 голос
/ 13 февраля 2012

Если вы идете в Терминал -> Настройки -> Вкладка «Настройки» -> «+» (для создания новой настройки), назовите настройку "монго", Нажмите на элемент меню «Shell» на панели, Установите флажок «Запуск» и введите команду оболочки для запуска и / или мониторинга журналов Установите другие варианты по вкусу Зайдите в пункт меню Gear (рядом с +, -, Default), выберите «Export» Сохраните файл "mongo.terminal" в своем репо.

Чтобы открыть, когда вы уже находитесь в терминале, введите открытый монго.терминал (укажите правильный путь при необходимости)

Теперь вот кикер: вы можете перейти на вкладку «Группы окон» и собрать конфиги специального назначения под одним именем проекта, экспортировать эту группу окон в файл .terminal и запустить их все вместе, открыв.

  • В OSX есть команда open, которая открывает основное приложение, связанное с данным файлом, как если бы пользователь щелкнул значок на рабочем столе. Это работает и для файлов .terminal. Существуют и другие способы, и он может быть взломан, если кто-то изменит ассоциации на файлы " .terminal", но это маловероятно и довольно легко обнаружить (ваши терминалы не запускаются).

  • Таким образом, вы можете легче выбрать цвет / фон / шрифт и т. Д. Из пользовательского интерфейса Терминала, и получить их в репозиторий для совместного использования и повторного использования.

  • Экспортированные файлы * .terminal являются документами plist в формате XML. Большинство важных полей данных выглядят так, как будто они закодированы в base64, поэтому не очень редактируемые, но есть несколько вещей, которые вы можете изменить, если знаете, что делаете.

0 голосов
/ 28 ноября 2017

Решение

class Terminal
    def self.runInNewWindow(command)
        `osascript -e 'tell app "Terminal"
        do script "#{command}"
        end tell'`
    end
end

class File
    def self.create(filename, text)
        fo = File.open(filename, "w+")
        File.chmod(0777, filename)
        fo.puts text
        fo.close
    end
end

Использование

filename = "file"
#closeWindowCommand = "osascript -e 'tell app \"Terminal\" to close first window' & exit"
removeFileCommand = "rm #{filename}"
command = "#{RUBY_VERSION}"
path = File.expand_path('../', __FILE__)
File.create(filename, "echo #{command}; #{removeFileCommand}")
Terminal.runInNewWindow("cd #{path}; ./#{filename}")

Полный образец

файл "run.rb"

class Terminal
    def self.runInNewWindow(command)
        `osascript -e 'tell app "Terminal"
        do script "#{command}"
        end tell'`
    end
end

class File
    def self.create(filename, text)
        fo = File.open(filename, "w+")
        File.chmod(0777, filename)
        fo.puts text
        fo.close
    end
end

filename = "file"
#closeWindowCommand = "osascript -e 'tell app \"Terminal\" to close first window' & exit"
removeFileCommand = "rm #{filename}"
command = "#{RUBY_VERSION}"
path = File.expand_path('../', __FILE__)
File.create(filename, "echo #{command}; #{removeFileCommand}")
Terminal.runInNewWindow("cd #{path}; ./#{filename}")

файл "run"

cd "$(dirname "$0")"
ruby run.rb

Выполнить пример

Открыть файл run

Результаты

enter image description here enter image description here

0 голосов
/ 29 декабря 2012

Elscripto - это драгоценный камень, который позволяет автоматизировать открытие вкладок Терминала, используя предопределенные сценарии: https://github.com/Achillefs/elscripto

0 голосов
/ 20 июня 2011

У меня была похожая настройка с использованием screen .Вам нужно написать очень простой .screenrc с командами, которые вы хотите запустить, и некоторыми конкретными командами экрана для создания и разделения окон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...