8

(Disclaimer: I posted a similar question earlier: In a ruby script, how to ask git to open its message editor. I decided to post this as a separate question because I think this question is more generic and thus possibly more applicable to other programmers. However, I kept the git-related question because I'm not sure if an answer here may apply there too. If there are rules against this, let me know)

I'm currently working on a command-line ruby gem that automates the "rebase + no-ff merging" workflow discussed at https://gist.github.com/jbenet/ee6c9ac48068889b0912. You can find the WIP code for this gem at https://github.com/gsmendoza/git_pretty_accept/tree/git_pretty_accept. The gem would do something like this:

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

When I try to run these git commands via ruby, vi some_temp_file.txt doesn't open the text editor like I hope it would. Instead, I see a warning "Vim: Warning: Output is not to a terminal" and the script just kind of hangs.

Any ideas?

2 Answers 2

8

To run a bash command from within a ruby script, you can use the system() command: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-system

This should produce the desired behavior in your particular case:

#!/usr/bin/ruby
system('vim', 'some_temp_file.txt')

Running this script from the command line opens the given file in Vim.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! So that's the difference between backticks and system :)
5

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

Will use the editor defined by the user in the EDITOR environment variable.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.