Ruby';获取';行为怪异?

Ruby';获取';行为怪异?,ruby,Ruby,我写这个程序是为了管理dotfiles和get的行为似乎不像通常那样,我无法通过Google追踪相关信息 #!/usr/bin/env ruby @filename = '' unless $*[0].nil? # Storing filename (and adding dot) @filename = "."+$*[0].to_s else # No filename given, exit and print to STDERR abort("No filename

我写这个程序是为了管理dotfiles和get的行为似乎不像通常那样,我无法通过Google追踪相关信息

#!/usr/bin/env ruby

@filename = ''

unless $*[0].nil?
  # Storing filename (and adding dot) 
  @filename = "."+$*[0].to_s
else 
  # No filename given, exit and print to STDERR
  abort("No filename specified")
end


@file_path = File.expand_path("~/#{@filename}")

if File.exists?(@file_path)

  print "Enter something: "
  gets
  puts $_

end
但是,程序在“get”行崩溃,如下所示

$ ruby ./link.rb bash_profile
Enter something: /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `gets': 
No such file or directory - bash_profile (Errno::ENOENT)
  from /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `gets'
  from /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `<main>'
$ruby./link.rb bash\u配置文件
输入内容:/Users/krystah/repos/backpack/dotfiles/link.rb:24:in'get':
没有这样的文件或目录-bash_概要文件(Errno::enoint)
from/Users/krystah/repos/backpack/dotfiles/link.rb:24:in'get'
from/Users/krystah/repos/backpack/dotfiles/link.rb:24:in`'
来自:

获取(sep=$/)→ 字符串或零
获取(限制)→ 字符串或零
获取(sep,限制)→ 字符串或零

ARGV
(或
$*
)中的文件列表返回下一行(并将其分配给
$);如果命令行上没有文件,则从标准输入返回下一行

您在
ARGV
中确实有东西,因此
gets
将尝试读取名为
'bash_profile'
的文件,然后抱怨没有这样的文件。您可能希望更明确地了解您的阅读来源:

print "Enter something: "
$stdin.gets
puts $_

这实际上是一个非常有趣的问题<代码>获取(以及其中的许多其他函数)通常是为一行程序设计的,所以它们的行为以令人惊讶的方式专门化。一旦你了解了他们的意图,这种奇怪的行为就不那么令人惊讶了。

来自:

获取(sep=$/)→ 字符串或零
获取(限制)→ 字符串或零
获取(sep,限制)→ 字符串或零

ARGV
(或
$*
)中的文件列表返回下一行(并将其分配给
$);如果命令行上没有文件,则从标准输入返回下一行

您在
ARGV
中确实有东西,因此
gets
将尝试读取名为
'bash_profile'
的文件,然后抱怨没有这样的文件。您可能希望更明确地了解您的阅读来源:

print "Enter something: "
$stdin.gets
puts $_


这实际上是一个非常有趣的问题<代码>获取(以及其中的许多其他函数)通常是为一行程序设计的,所以它们的行为以令人惊讶的方式专门化。一旦您了解了它们的预期用途,这种奇怪的行为就不那么令人惊讶了。

似乎粘贴时遗漏了行号,但错误消息中的第24行确实等于File.exist子句中的gets行。似乎粘贴时遗漏了行号,但是错误消息中的第24行确实等于File.exist子句中的gets行。非常好的洞察力,非常感谢。:)实际上,我试图找到有关如何显式选择gets源的信息,但没有结果。无论如何,这解决了它,所以再次,谢谢!非常有洞察力,非常感谢。:)实际上,我试图找到有关如何显式选择gets源的信息,但没有结果。无论如何,这解决了它,所以再次,谢谢!