2009-12-21 89 views
218

我在Windows上運行Ruby,但我不知道是否應該有所作爲。我想要做的就是獲取當前工作目錄的絕對路徑。這可能來自irb嗎?顯然,使用File.expand_path(__FILE__)如何從irb獲取當前工作目錄的絕對路徑

一個腳本這是可能的,但是從IRB我嘗試以下,並得到了「Permission denied」錯誤:

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

現在的問題是實際上沒有清楚:你想一)當前工作目錄(這是'Dir.pwd'),或者你想要的目錄,目前正在運行腳本(它是'File.dirname(__ FILE __)')?想象一下,在其他任何地方調用腳本(比如'ruby testdirectory/testscript.rb'),這兩者將會不同! – amenthes 2015-03-22 21:13:51

+1

@amenthes您聲稱我的問題不清楚,然後問「你想要一個)當前的工作目錄....」和我的問題狀態「我想要做的就是獲取*當前工作目錄的*絕對路徑... 」。什麼不清楚? – 2015-07-18 23:57:51

+4

由於「很明顯從腳本中可以使用'File.expand_path(__ FILE __)'」 - 因爲'__FILE__'的位置與當前工作目錄(它是'Dir.pwd')是不同的動物。 – amenthes 2015-07-19 09:06:17

回答

160

File.expand_path File.dirname(__FILE__)將返回相對於這個命令是從所謂的文件目錄。

Dir.pwd返回工作目錄(結果等同於你的終端執行pwd

+2

「Dir.pwd」等同於'pwd -P'。'exec('pwd -L')'將在終端中獲得相當於pwd的值(pwd通常是bash內建的,並且不會解析符號鏈接)。 – 2014-01-26 03:27:09

+1

請看看經常被遺忘的Pathname類:http://www.ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html – awenkhh 2014-06-27 19:26:19

+0

有一個問題,Dir.pwd會打印運行腳本的工作目錄 - 這可能不是你想要的。 – Brandon 2014-10-13 20:24:59

4

這會給你當前文件的工作目錄。

File.dirname(__FILE__) 

實施例:

current_file: 「/Users/nemrow/SITM/folder1/folder2/amazon.rb」

結果: 「/用戶/ nemrow/SITM/folder1中/文件夾2」

+0

請注意,工作目錄不能與實際文件相同。所以'Dir.pwd'和你的建議可能會有所不同。 – Besi 2015-02-02 13:41:59

42

至於相對於當前正在執行腳本的路徑,因爲紅寶石2.0你也可以使用

__dir__ 

因此,這是基本相同

File.dirname(__FILE__) 
+8

我不知道爲什麼不一致,爲什麼不用'__DIR__'? – Zequez 2015-09-19 01:16:18

+11

@Zequez因爲['__FILE__'是一個常量,但'__dir__'是一種方法](http://stackoverflow.com/a/15190725/405017)。 – Phrogz 2016-01-03 16:50:38

+0

這將打印@Brandon所說的腳本的運行目錄。 – 2016-06-03 03:17:57

1

如果你想獲得當前的RB文件的目錄的完整路徑:

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

通過這個,你可以得到的任何絕對路徑文件位於任何目錄中。

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

這將返回

=> "/User/abc/xyz/some-dir/some-file-name" 
相關問題