Ruby中的〜/点在哪里?

我从Ruby编程开始,我想编写一个包含创build目录的小脚本。

当我使用system 'mkdir', '-p' '~/.dir'不会创build目录。 但是,当我将其更改为/home/name/dir所有function都按预期工作。 因为我想保持脚本的通用性,我怎样才能实现~/ ?的通常的Unix / Linux语义。

在Ruby中, ~在文件路径中没有特殊的含义。 即使它在system调用的参数中使用,也不会被底层的shell扩展。 你的代码应该在当前工作目录下创建一个名字为~的目录,例如:

 $ ruby -e 'system("mkdir", "-p", "~/.dir")' $ ls ~ $ ls -A '~' .dir 

您必须使用File.expand_path~扩展到您的主目录路径:

 File.expand_path('~') # => "/home/toro2k" 

在你的例子中:

 system('mkdir', '-p', File.expand_path('~/.dir')) 

在Ruby中,您也可以使用FileUtils.mkdir_p来创建目录:

 require 'fileutils' FileUtils.mkdir_p(File.expand_path('~/.dir')) 

更新 :锡人建议我的后一个例子可以使用Pathname类重写,如下所示:

 require 'pathname' Pathname.mkpath(Pathname.new('~/.dir').expand_path) 

它指向隐藏的目录.dir就在用户的root目录下。

这里~/表示用户的root目录。

~与Ruby中的目录语义无关。