我从Ruby编程开始,我想编写一个涉及创建目录的小脚本。
当我使用system 'mkdir', '-p' '~/.dir'
时,没有创建目录。但当我将其更改为/home/name/dir
时,一切都按预期工作。由于我想保持脚本通用,我如何实现~/
的常用Unix / Linux语义?
答案 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中的目录语义无关。