感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

カレントディレクトリを変更する。chdirでカレントディレクトリからの相対パス指定

<スポンサーリンク>

Rubyでカレントディレクトリを変更するのは、Dir.chdirを使う。
まずは普通に使ってみよう。

Dir.chdir("hoge")
p Dir.pwd

## Dir.chdirをブロックに渡すと、
## ブロック内の処理だけを移動先のディレクトリで行い、
## 元のディレクトリに帰ってくる
Dir.chdir("/tmp/free") do
  `touch hoge.txt`
  res = `ls -ltr`
  p res
end

p Dir.pwd

ブロック内では、そのディレクトリに移動してファイルを作って返って来ている。
ブロックを抜けると、元のディレクトリに戻る。

"/users/user/dev/ruby/hoge"
~/dev/ruby $ ruby dir.rb 
"total 0\n-rw-r--r--  1 user wheel  0  3 24 23:41 hoge.txt\n"
"/users/user/dev/ruby/hoge"

しかし、ここでひとつ、問題が発生する。
Dir.chdirでは、~(チルダ)が認識されないのだ。

No such file or direcrotyみたいに怒られる。

Rubyのchdirでカレントディレクトリからの相対パスを指定するには、ENV['HOME']を使う。

home = ENV['HOME']

Dir.chdir("#{home}/tmp/")
p Dir.pwd

こうすると、

"/users/user/tmp"

というように、カレントディレクトリからの相対パスを指定できる。

<参考>
http://stackoverflow.com/questions/2504646/ruby-opening-files-relative-to-home-directory