从ruby代码打开终端?

时间:2011-06-20 19:19:55

标签: ruby macos terminal

是否有任何系统库可以让我从ruby打开终端组(作为标签而不是多个窗口)?我不想使用exec()方法打开终端应用程序......例如,我在我的环境中运行了大约5个不同的终端(mongodb,redis,daemons等),我想编写一个脚本将打开该组窗口并执行命令以启动所有这些进程。有任何想法吗?我想我可能只能用Objective-C或MacRuby来做。

6 个答案:

答案 0 :(得分:4)

就个人而言,我会说忘掉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 :(得分:4)

terminitor gem确实完全你想要的东西,它在幕后使用rb-appscript。

答案 2 :(得分:1)

如果你去 终端 - >偏好 - >设置标签 - > “+”(创建新设置), 将设置命名为“mongo”, 单击窗格中的“Shell”菜单项, 选中“Startup”复选框并输入shell命令以启动和/或监视日志 设置其他选择品尝 转到Gear菜单项(+, - ,默认旁边),选择“导出” 在您的仓库中另存为“mongo.terminal”文件。

要在您已经在终端中打开,请键入 打开mongo.terminal (根据需要插入适当的路径)

现在这里是踢球者:您可以进入“窗口组”选项卡并在一个项目名称下收集专用终端配置,将该窗口组导出到.terminal文件,并通过打开它们将它们全部一起启动。

  • OSX有一个名为“open”的命令,它将打开与给定文件关联的主应用程序,就像用户单击其桌面图标一样。这也适用于 .terminal文件。还有其他方法,如果有人将关联更改为“ .terminal”文件,它可能会被劫持,但这不太可能并且相当容易检测(您的终端无法启动)。

  • 您可以通过这种方式从终端用户界面更轻松地选择颜色/背景/字体等,并将它们放入回购中以便共享和重用。

  • 导出的* .terminal文件是XML格式的plist文档。大多数重要数据字段看起来都是base64编码的,所以不是很容易编辑,但如果你知道自己在做什么,可以改变一些事情。

答案 3 :(得分:0)

我使用screen进行了类似的设置。您需要使用要运行的命令编写一个非常简单的.screenrc,以及一些用于创建和拆分窗口的特定屏幕命令。

答案 4 :(得分:0)

Elscripto是一个gem,允许您自动打开运行预先指定脚本的终端选项卡:https://github.com/Achillefs/elscripto

答案 5 :(得分:0)

解决方案

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}")
  

文件“运行”

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

执行示例

打开文件运行

结果

enter image description here enter image description here