2010-02-05 7 views

Odpowiedz

38

File.dirname(__FILE__) poda ścieżkę odnoszącą się do uruchamianego skryptu. File.expand_path(File.dirname(__FILE__)) dadzą ci absolutną ścieżkę.

+0

to niewłaściwy sposób to zrobić i może powodować błędy. \t Należy pamiętać, że po użyciu polecenia Dir.chdir może to być inny katalog niż miejsce przechowywania skryptu. "__dir__" jest właściwym sposobem na zrobienie tego. –

+0

To wydaje się być jedyną drogą dla każdego, kto utknął w Rubim <2.0 –

-4

ENV ["PWD"] wydaje mi się najprostszym sposobem pod Linuksem. Nie znam sposobu, w jaki agnostyk może działać w systemie OS.

+0

Dzięki! Dobry dla mojej ogólnej wiedzy o Linuksie. –

+0

To jest katalog domowy, a nie bieżący katalog roboczy lub katalog, w którym znajduje się skrypt. –

+0

B * gger, brak snu to zrobi. Miałem na myśli oczywiście ENV ["PWD"]. Ale odpowiedź Ba jest znacznie lepsza. – Shadowfirebird

23

Zastosowanie __dir__

Jak Ruby 2.0, __dir__ jest najprostszym sposobem, aby dostać to. To

Zwraca też w postaci bezwzględną ścieżkę do katalogu z plikiem z którego ta metoda jest wywoływana.

Zobacz dokumentację __dir__ i "Why is __FILE__ uppercase and __dir__ lowercase?".

+0

Cóż, oprócz" __dir__ "będącego poprawną odpowiedzią, dzięki za połączenie z różnicą wielkich i małych liter, było moje pierwsze pytanie po znalezieniu go jako dobrze :) – SidOfc

2

użycie __dir__

File.dirname(__FILE__) nie jest właściwym sposobem na uzyskanie katalog, w którym jest przechowywany skrypt.

Na początku katalog roboczy i katalog z plikiem skryptowym jest taki sam, ale może się zmienić.

Na przykład:

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

do pliku skryptu zapisanego w /Desktop/tmp działa da wyświetlamy

/home/mateusz/Desktop/tmp 
/home/mateusz/Desktop