用户输入 - 路径自动完成

时间:2014-05-27 11:53:46

标签: ruby bash autocomplete

在我的ruby脚本中,我需要读取一个路径的用户条目。

所以,我想读取一个与终端相同类型的自动完成的用户条目(使用TAB)。

因为我没有找到一种简单的方法,所以我考虑使用bash命令:

path = `read -e -p "Enter your path: "`

但是我收到了一个错误:

``': No such file or directory - read -e (Errno::ENOENT)

如果有人对此错误或红宝石解决方案有任何解释,那就太棒了:)

提前致谢。

编辑:

似乎我不太清楚:我想(在ruby脚本中间)获取用户条目,例如:

path = STDIN.gets.chomp

但是对于获取,路径没有自动完成。所以我想知道是否有一种简单的方法可以使用get(或任何其他方法)自动完成。

因为我不知道任何解决方案,所以我尝试使用带有-e选项的bash命令read。 这在终端中运行良好但是当我把它放在我的ruby脚本中用引号括起来时,我得到了上面的错误。

事实上:

#! /bin/bash
read -e -p "Enter your path: "
echo $REPLY

运作良好,而

#! /usr/bin/env ruby
`read -e -p "Enter your path: "`
`echo $REPLY`

不起作用 - >为什么?

3 个答案:

答案 0 :(得分:0)

它无法使用bash命令。尝试使用thor 例如:

require "thor"

class MyCLI < Thor
  desc "path /path/to/file", "select path"
  def path(p)
    puts "selected path #{p}"
  end
end

MyCLI.start(ARGV)

然后在consol自动完成路径应该工作

$ ruby ./t.rb path /home…

答案 1 :(得分:0)

echo "Enter your path: ";read path

答案 2 :(得分:0)

您可以使用readline库。例如:

require 'readline'

Readline.completion_proc = Proc.new do |str|
  Dir[str + '*'].grep( /^#{Regexp.escape(str)}/ )
end

file = File.open(Readline.readline('File Name> ').strip!)

更多信息:http://bogojoker.com/readline/