在ruby脚本中打开文本编辑器

gsm*_*oza 3 ruby io shell

(免责声明:我之前发布了一个类似的问题:在ruby脚本中,如何让git打开它的消息编辑器.我决定将此作为一个单独的问题发布,因为我认为这个问题更通用,因此可能更适用于其他程序员但是,我保留了与git相关的问题,因为我不确定这里的答案是否也适用于那里.如果有违规的规则,请告诉我)

我目前正在开发一个命令行ruby gem,它可以自动化https://gist.github.com/jbenet/ee6c9ac48068889b0912中讨论的"rebase + no-ff merge"工作流程.您可以在https://github.com/gsmendoza/git_pretty_accept/tree/git_pretty_accept找到此gem的WIP代码.宝石会做这样的事情:

`vi some_temp_file.txt`
`git co master`
`git pull`
`git co pull_request`
`git rebase master`
`git co master`

merge_message = File.read('some_temp_file.txt')
`git merge --message "#{merge_message}" --no-ff pull_request`

`git push`
`git branch -d pull_request`
`git push origin:pull_request`
Run Code Online (Sandbox Code Playgroud)

当我尝试通过ruby运行这些git命令时,vi some_temp_file.txt不会像我希望的那样打开文本编辑器.相反,我看到一个警告"Vim:警告:输出不是终端",脚本只是挂起.

有任何想法吗?

Jak*_*mer 5

要从ruby脚本中运行bash命令,可以使用以下system()命令:http: //www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-system

这应该在您的特定情况下产生所需的行为:

#!/usr/bin/ruby
system('vim', 'some_temp_file.txt')
Run Code Online (Sandbox Code Playgroud)

从命令行运行此脚本将在Vim中打开给定文件.

  • 谢谢!所以这就是反引号和`system`之间的区别:) (2认同)

ork*_*den 5

system("#{ENV['EDITOR']} 'yourfile.txt")

将使用用户在EDITOR环境变量中定义的编辑器。