Używam Ruby na Windowsie, choć nie wiem, czy to powinno coś zmienić. Chcę tylko uzyskać ścieżkę bezwzględną bieżącego katalogu roboczego. Czy to jest możliwe z IRB? Najwyraźniej ze skryptu jest to możliweFile.expand_path(__FILE__)
Ale z irb wypróbowałem następujące i otrzymałem błąd „Odmowa zezwolenia”:
File.new(Dir.new(".").path).expand
ruby
irb
working-directory
Dexygen
źródło
źródło
Dir.pwd
), czy też katalog, w którym znajduje się aktualnie uruchomiony skrypt (który jestFile.dirname(__FILE__)
)? Wyobraź sobie, że wywołujesz skrypt skądkolwiek (jakruby testdirectory/testscript.rb
) tutaj, oba będą różne!File.expand_path(__FILE__)
” - ponieważ__FILE__
lokalizacja jest innym zwierzęciem niż aktualny działający katalog (który jestDir.pwd
).Odpowiedzi:
Dir.pwd
wydaje się załatwić sprawę.http://ruby-doc.org/core/Dir.html#method-c-pwd
źródło
pwd
), co może być zupełnie inne niż miejsce, w którym znajduje się plik skryptu.File.expand_path File.dirname(__FILE__)
zwróci katalog względem pliku, z którego to polecenie jest wywoływane.Ale
Dir.pwd
zwraca katalog roboczy (wyniki identyczne jakpwd
w twoim terminalu)źródło
Dir.pwd
jest równoważne zpwd -P
.exec('pwd -L')
otrzyma odpowiednik pwd w terminalu (pwd jest zwykle wbudowanym bashem i nie rozpoznaje dowiązań symbolicznych).bundle exec rspec spec
w katalogu „/ project”, natomiast w pliku „spec / spec_helper.rb” wartośćDir.pwd
nadal będzie wynosić „/ project”.Jeśli chodzi o ścieżkę względem bieżącego skryptu wykonawczego, od Ruby 2.0 możesz także użyć
Jest to w zasadzie to samo co
źródło
__FILE__
jest stałą, ale__dir__
jest metodą .To da ci katalog roboczy bieżącego pliku.
Przykład:
current_file: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"
wynik: „/ Users / nemrow / SITM / folder1 / folder2”
źródło
Dir.pwd
i swoją moc sugestia potencjalnie różnią.Jeśli chcesz uzyskać pełną ścieżkę do katalogu bieżącego pliku rb:
źródło
Dzięki temu można uzyskać bezwzględną ścieżkę do dowolnego pliku znajdującego się w dowolnym katalogu.
To wróci
źródło