2013-11-09 2 views
2

(Отказ от ответственности: Я отправил аналогичный вопрос ранее: In a ruby script, how to ask git to open its message editor. Я решил опубликовать это как отдельный вопрос, потому что я думаю, что этот вопрос более общий и, следовательно, возможно более применим к другим программистам, Я сохранил вопрос, связанный с git, потому что я не уверен, что там тоже может быть ответ. Если есть какие-то правила против этого, дайте мне знать)Открытый текстовый редактор в рубиновом скрипте

В настоящее время я работаю над рубиновой жемчужиной командной строки, автоматизирует рабочий процесс «rebase + no-ff merging», обсуждаемый в https://gist.github.com/jbenet/ee6c9ac48068889b0912. Код WIP для этого драгоценного камня можно найти по номеру https://github.com/gsmendoza/git_pretty_accept/tree/git_pretty_accept. Драгоценный камень будет делать что-то вроде этого:

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

Когда я пытаюсь запустить эти команды GIT через рубин, vi some_temp_file.txt не открывает текстовый редактор, как я надеюсь, что это будет. Вместо этого я вижу предупреждение «Vim: Warning: Output is not to terminal», а сценарий просто зависает.

Любые идеи?

ответ

4

Чтобы выполнить команду Баша изнутри рубинового сценария, вы можете использовать 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

Спасибо! Так вот в чем разница между backticks и 'system' :) – gsmendoza

1

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

будет использовать редактор, определенный пользователем в переменной EDITOR среды.

Смежные вопросы