【问题标题】:Open text editor in a ruby script在 ruby​​ 脚本中打开文本编辑器
【发布时间】:2013-11-21 07:42:12
【问题描述】:

(免责声明:我之前发布了一个类似的问题:In a ruby script, how to ask git to open its message editor。我决定将其作为一个单独的问题发布,因为我认为这个问题更通用,因此可能更适用于其他程序员。但是,我保留了 git-相关问题,因为我不确定这里的答案是否也适用于那里。如果有针对此的规则,请告诉我)

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

`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`

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

有什么想法吗?

【问题讨论】:

    标签: ruby shell io


    【解决方案1】:

    要在 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')
    

    从命令行运行这个脚本会在 Vim 中打开给定的文件。

    【讨论】:

    • 谢谢!这就是反引号和system 之间的区别:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 1970-01-01
      • 2013-11-21
      • 2019-01-29
      • 2018-10-11
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多