我从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中的目录语义无关。