2013-11-09 82 views
2

(聲明:我之前發佈了類似的問題:In a ruby script, how to ask git to open its message editor。我決定將此作爲單獨問題發佈,因爲我認爲這個問題更通用,因此可能更適用於其他程序員。我不停的git的相關問題,因爲我不知道答案在這裏可以申請有太多。如果有反對這個規則,讓我知道)在紅寶石腳本中打開文本編輯器

我目前工作的一個命令行紅寶石的寶石,自動化在https://gist.github.com/jbenet/ee6c9ac48068889b0912討論的「重新加載+不合並」工作流程。您可以在https://github.com/gsmendoza/git_pretty_accept/tree/git_pretty_accept找到該寶石的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` 

當我嘗試通過Ruby來運行這些Git命令,vi some_temp_file.txt不打開文本編輯器,就像我希望它會。相反,我看到一個警告「Vim:警告:輸出不是到終端」,腳本只是掛起。

任何想法?

回答

4

從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中打開給定的文件。

+1

謝謝!所以這就是反引號和'system'的區別:) – gsmendoza

1

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

將使用在EDITOR環境變量的用戶定義的編輯器。