Ruby中指向〜/指向哪里?

时间:2014-04-08 15:07:35

标签: ruby linux directory

我从Ruby编程开始,我想编写一个涉及创建目录的小脚本。

当我使用system 'mkdir', '-p' '~/.dir'时,没有创建目录。但当我将其更改为/home/name/dir时,一切都按预期工作。由于我想保持脚本通用,我如何实现~/的常用Unix / Linux语义?

2 个答案:

答案 0 :(得分:5)

在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'))

更新:根据Tin Man的建议,我可以使用Pathname类重写我的后一个示例,如下所示:

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

答案 1 :(得分:1)

它指向您用户的.dir目录下的隐藏目录root

此处~/代表用户的root目录。

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