即使文件存在,以下操作也会以Errno::ENOENT: No such file or directory失败:

open('~/some_file')

然而,我可以做到:

open(File.expand_path('~/some_file'))

我有两个问题:

  1. 为什么open不将波浪线处理为指向主目录?
  2. 有比File.expand_path更好的方法吗?

推荐答案

  1. shell(bash、zsh等)负责通配符扩展,因此在第一个示例中没有shell,因此没有扩展.使用波浪线指向$HOME只是一种惯例;事实上,如果你看一下File.expand_path的文档,它正确地解释了tilde,但它是函数本身的一个特性,而不是底层系统固有的东西;要正确设置环境变量File.expand_path.这给我们带来了可能的 Select ...
  2. 试试这个:

    open(ENV['HOME']+'/some_file')
    

我希望它足够光滑.我个人认为使用环境变量比使用expand_path在语义上更清晰.

Ruby相关问答推荐

Ruby插值法导致无序输出

如何使用Ruby中的时区函数S标准库?

这个#divmod 方法输出这个结果是做什么的?

如何在 Ruby 中创建可调用属性

为什么 Rake 不能连续调用多个任务?

在一组字符串中找到最长的公共起始子字符串

哈希或其他对象的内存大小?

使用 Ruby 将文件从一个目录复制到另一个目录

如何从 Gemfile 安装 gem?

Ruby:从字节创建一个字符串

如何找到安装 Ruby Gem 的路径(即 Gem.lib_path c.f. Gem.bin_path)

C# ?? Ruby 中的运算符?

Ruby 中的p是什么?

仅针对特定参数的 Rspec 存根方法

Ruby 中 Array#reject 的反义词是什么?

如何在 Ruby 中创建可重用的块/proc/lambda?

如何在 Ruby 符号中转义破折号-?

Ruby 中的标准文件命名约定

Ruby 将标题发布到 slug

运行 Ruby 命令时,PATH 中不安全的世界可写目录 /Users/username,模式 040777