如何告诉STDIN停止阅读?

时间:2013-02-14 22:20:25

标签: ruby

所以我正在研究Ruby中的Build Awesome命令行应用程序。在页81,我们应该使用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代表什么?

2 个答案:

答案 0 :(得分:4)

这是end-of-file character。您可以在Unix系统上使用 Ctrl + D 或在Windows上使用 Ctrl + Z 进行字面输入。显示 Ctrl 修饰符的传统方式是使用^前缀,例如^D

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

答案 1 :(得分:3)

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

  

^ 6代表什么?

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