irbから現在の作業ディレクトリの絶対パスを取得する方法


273

WindowsでRubyを実行していますが、それが違いをもたらすかどうかはわかりません。現在の作業ディレクトリの絶対パスを取得するだけです。これはirbから可能ですか?どうやらスクリプトからそれを使用することが可能ですFile.expand_path(__FILE__)

しかし、irbから次のことを試したところ、「アクセスが拒否されました」というエラーが発生しました。

File.new(Dir.new(".").path).expand

10
質問は実際には明確ではありません:a)現在の作業ディレクトリ(これはDir.pwd)が必要ですか、それとも現在実行中のスクリプトが置かれているディレクトリ(それはFile.dirname(__FILE__))が必要ですか?他の場所(などruby testdirectory/testscript.rb)からスクリプトを呼び出すことを想像してみてください。2つは異なります。
amenthes 2015年

1
@amenthes私の質問は不明確であると主張し、次に「a)現在の作業ディレクトリ...を実行しますか?」と質問し、私の質問は「現在の作業ディレクトリの絶対パスを取得するだけです...」と述べています。何が不明確ですか?
Dexygen、2015

7
「どうやらスクリプトからそれを使用することが可能だ」という文のために不明確ですFile.expand_path(__FILE__)- __FILE__の場所は現在の作業ディレクトリ(つまりDir.pwd)とは異なる動物だからです。
amenthes 2015

2
@amenthes私は、質問のタイトルにある「from irb」(および質問自体の中に2回)を「スクリプトから」から区別するのにかなり良い仕事をしたと思った
Dexygen

回答:


515

Dir.pwd トリックを行うようです。

http://ruby-doc.org/core/Dir.html#method-c-pwd


4
もうすぐ10年になりますが、それでもこの回答ありがとうございます。
Nick Schwaderer、

1
注:これは現在のファイルの場所を返しませ。そのためには、以下の回答をご覧ください。これは、スクリプトを呼び出しているシェルの現在の作業ディレクトリ(のようにpwd)のみを返します。これは、スクリプトファイルが置かれている場所とは完全に異なる場所である可能性があります。
GDP2

186

File.expand_path File.dirname(__FILE__) このコマンドが呼び出されたファイルに関連するディレクトリを返します。

しかしDir.pwd、作業ディレクトリを返します(結果はpwd端末で実行した場合と同じです)


3
Dir.pwdと同等pwd -Pです。exec('pwd -L')端末でpwdに相当するものを取得します(通常、pwdはbash組み込みであり、シンボリックリンクを解決しません)。
バリーケリー

1
忘れがちなパス名クラスも確認してください:ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
awenkhh

1
問題があり、Dir.pwdはスクリプトが実行された場所の作業ディレクトリを出力します-これはあなたが望むものではないかもしれません。
ブランドン

はい、bundle exec rspec specディレクトリ「/ project」でコマンドを実行し、ファイル「spec / spec_helper.rb」では、の値Dir.pwdが「/ project」のままである と想定しています。
ハイバー2018年

59

現在実行中のスクリプトに対する相対パスについては、Ruby 2.0以降も使用できます

__dir__

これは基本的に同じです

File.dirname(__FILE__)


これにより、@ Brandonが言ったように、スクリプトが実行される作業ディレクトリが出力されます。
aldrien.h 2016年

6

これにより、現在のファイルの作業ディレクトリが表示されます。

File.dirname(__FILE__)

例:

current_file: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"

結果:「/ Users / nemrow / SITM / folder1 / folder2」


1
作業ディレクトリは実際のファイルと同じであってはならないことに注意してください。したがってDir.pwd、あなたの提案は潜在的に異なる可能性があります。
Besi

4

現在のrbファイルのディレクトリの完全パスを取得したい場合:

File.expand_path('../', __FILE__)

3

これにより、任意のディレクトリにある任意のファイルの絶対パスを取得できます。

File.join(Dir.pwd,'some-dir','some-file-name')

これは戻ります

=> "/User/abc/xyz/some-dir/some-file-name"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.