我目前正在研究一个Ruby gem的CocoaPods功能。有一个现有的命令可以接受许多选项。我想添加一个额外的选项,通过打开默认文本编辑器,用户可以输入自定义消息,当用户保存并退出编辑器时,消息将被输入到已执行的命令中。
我想要复制的是如何将-m
添加到git commit
命令以输入提交消息。我几乎没有创建命令行工具的经验,所以非常感谢任何帮助。
目标是执行特定命令command --message
,打开编辑器,让用户输入自定义消息,并执行命令,并将自定义消息作为argv
中存储的参数之一。
答案 0 :(得分:2)
常见的工作流程是:
/usr/bin/editor
,对于其他linuces - shell变量的内容$EDITOR
等; Kernel#system
运行shell命令(不带反引号!); 0
; 在红宝石中,就像:
▶ f = Tempfile.new 'cocoapods'
#⇒ #<File:/tmp/am/cocoapods20151120-6901-u2lubx>
-rw------- 1 am am 0 nov 20 15:03 /tmp/am/cocoapods20151120-6901-u2lubx
▶ path = f.path
#⇒ "/tmp/am/cocoapods20151120-6901-u2lubx"
▶ f.puts 'This content is already presented in file'
#⇒ nil
▶ f.close # HERE MUST BE ENSURE BLOCK, BUT FOR THE SAKE OF AN EXAMPLE...
#⇒ nil
▶ system "editor #{path}"
#⇒ Vim: Warning: Output is not to a terminal
如果您在控制台中测试它,只需键入任何内容,然后键入 Esc : w q 。在现实生活中,将会打开正常vim
(或默认编辑器)。
▶ File.read path
#⇒ "GGGGGGGGGThis content is already presented in file\n"
所有在一起:
#!/usr/bin/env ruby
require 'tempfile'
f = Tempfile.new 'cocoapods'
path = f.path
f.puts 'This content is already presented in file'
f.close # HERE MUST BE ENSURE BLOCK, BUT FOR THE SAKE OF AN EXAMPLE...
system "editor #{path}"
puts File.read path