web-dev-qa-db-ja.com

Rubyスクリプトは、それがどのディレクトリにあるかを伝えることができますか?

Bashスクリプトのソースディレクトリを内部から取得する に触発されて、Rubyこれを行う方法は何ですか?

55

File.dirname(__FILE__)は、実行中のスクリプトに対する相対パスを提供します。 File.expand_path(File.dirname(__FILE__))は絶対パスを提供します。

63
gaqzi

使用する __dir__

Ruby 2.0、__dir__は、これを取得する最も簡単な方法です。それ

このメソッドが呼び出されるファイルのディレクトリの正規化された絶対パスを返します。

__dir__ のドキュメント、および「 __ FILE__が大文字で__dir__が小文字なのはなぜですか? "。

52
Nathan Long

___dir___ を使用します

File.dirname(__FILE__)は、スクリプトが格納されているディレクトリを取得する適切な方法ではありません。

作業ディレクトリとスクリプトファイルのあるディレクトリは同じですが、変更される場合があります。

例えば:

_Dir.chdir('..') do
    puts __dir__
    puts File.expand_path(File.dirname(__FILE__))
end
_

_/Desktop/tmp_に格納されているスクリプトファイルの場合、実行すると出力が得られます

_/home/mateusz/Desktop/tmp
/home/mateusz/Desktop
_
3