nes*_*eka 2 ruby linux directory
我从Ruby编程开始,我想编写一个涉及创建目录的小脚本.
当我使用时system 'mkdir', '-p' '~/.dir'没有创建目录.但是当我把它改成/home/name/dir一切按预期工作时.由于我想保持脚本通用,我怎样才能实现通常的Unix/Linux语义~/?
在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)