在我的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`
不起作用 - >为什么?
答案 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!)