我已經編寫了幾個使用Ruby 1.9.3進行系統管理的小型Ruby腳本。在我使用的一個腳本中:令人困惑的File.dirname行爲
File.dirname(__FILE__)
獲取腳本文件的目錄。這將返回一個相對路徑,但是當我從第二個腳本File.dirname
調用該腳本時,將返回絕對路徑。
Ruby Doc在其示例中列出了絕對返回路徑,而我在Ruby Forum上發現了一個用戶說dirname
應只返回相對路徑的討論。
我使用Ruby中論壇建議的解決方案使用File.expand_path
總是得到這樣的絕對路徑:
File.expand_path(File.dirname(__FILE__))
,但有沒有辦法使dirname
一致的行爲?
UPDATE:
要擴大Janathan Cairs答案,我做了兩個腳本:
s1.rb:
puts "External script __FILE__: #{File.dirname(__FILE__)}"
s0.rb:
puts "Local script __FILE__: #{File.dirname(__FILE__)}"
require './s1.rb'
運行./s0.rb給出了以下內容
File.dirname('/home/jon/test.rb') # => '/home/jon'
File.dirname('test.rb') # => '.'
__FILE__
返回當前腳本的名字,那就是:NG輸出:如果給的是相對路徑,如果給出一個絕對路徑
Local script __FILE__: .
External script __FILE__: /home/kenneth/Pictures/wp/rip_vault
是的,這解釋了它。然後所學到的教訓是從其他腳本調用腳本使__FILE__成爲絕對路徑。我想這似乎夠合理。 – Kenneth 2013-03-12 10:52:39