2013-02-14 105 views
1

所以我正在学习Ruby中的Build Awesome命令行应用程序。在第81页,我们应该使用STDIN将多个任务输入到一个项目中。如何告诉STDIN停止阅读?

File.open(global_options[:filename], 'a+') do |todo_file| 
    if task_names.empty? 
    puts "Reading new tasks from stdin..." 
    task_names = STDIN.readlines.map {|a| a.chomp} 
    end 
    tasks = 0 
    task_names.each do |task| 
    todo_file.puts [task, Time.now].join(', ') 
    tasks+=1 
    end 
    if tasks == 0 
    raise "You must provide tasks on the command-line or standard input" 
    end 
end 

通常的方式进入任务到项目是这样的$todo new "Rake leaves但上面的代码,我们可以到什么是在下面的例子。

它确实有效。但是,我如何告诉STDIN停止收听?关于如何使用它的例子是...

$ todo new 
Rake leaves 
Take out trash 
Clean garage 
Put away dishes 
^D 

^D代表什么?

回答

4

这是一个end-of-file character。你可以从字面上在Unix系统上与按Ctrl +d或在Windows上使用按Ctrl +ž此。显示Ctrl修饰符的传统方式是使用前缀^,例如^D

请注意,这会完全关闭标准输入。如果您想在输入这些行后读取更多数据,则需要检查输入本身是否有不同的分隔符,例如空行。

3

您可以通过在类Unix系统上按Ctrl-d或在Windows上按Ctrl-z来关闭STDIN。

^6表示什么?

您确定它说的是^6而不是^d?如果是这样,那可能是一个错字。