Ruby中指向〜/指向哪里?

nes*_*eka 2 ruby linux directory

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

当我使用时system 'mkdir', '-p' '~/.dir'没有创建目录.但是当我把它改成/home/name/dir一切按预期工作时.由于我想保持脚本通用,我怎样才能实现通常的Unix/Linux语义~/

tor*_*o2k 5

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

$ ruby -e 'system("mkdir", "-p", "~/.dir")'
$ ls
~
$ ls -A '~'
.dir
Run Code Online (Sandbox Code Playgroud)

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

File.expand_path('~')
# => "/home/toro2k"
Run Code Online (Sandbox Code Playgroud)

在你的例子中:

system('mkdir', '-p', File.expand_path('~/.dir'))
Run Code Online (Sandbox Code Playgroud)

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

require 'fileutils'
FileUtils.mkdir_p(File.expand_path('~/.dir'))
Run Code Online (Sandbox Code Playgroud)

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

require 'pathname'
Pathname.mkpath(Pathname.new('~/.dir').expand_path)
Run Code Online (Sandbox Code Playgroud)

  • 我强烈建议您查看Ruby的内置[Pathname](http://www.ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html)类.从文档中可以看出:"文件,FileTest中的所有功能以及Dir和FileUtils中的所有功能都以不足为奇的方式包含在内.它本质上是所有这些功能的外观,甚至更多." (2认同)