Poniższy błąd kończy się niepowodzeniem Errno::ENOENT: No such file or directory
, nawet jeśli plik istnieje:
open('~/some_file')
Jednak mogę to zrobić:
open(File.expand_path('~/some_file'))
Mam dwa pytania:
- Dlaczego
open
tylda nie jest przetwarzana jako wskazująca na katalog domowy? - Czy jest lepszy sposób niż
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
aby działał w obu przypadkach.Nie jestem pewien, czy to było dostępne przed Ruby 1.9.3, ale uważam, że najbardziej eleganckim rozwiązaniem jest użycie
Dir.home
części rdzenia.źródło
Zamiast polegać na
$HOME
poprawnym ustawieniu zmiennej środowiskowej, co może być kłopotliwe, gdy używasz współdzielonych komputerów w sieci do programowania, możesz uzyskać to od Rubiego za pomocą:Uważam, że to identyfikuje aktualnie zalogowanego użytkownika i pobiera jego katalog domowy, zamiast polegać na
$HOME
ustawianej globalnej zmiennej środowiskowej. Uważam, że jest to alternatywne rozwiązanie do powyższego.źródło
Odkryłem problem tyldy i stworzono łatkę do dodania,
absolute_path
która traktuje tyldę jak zwykły znak.Z dokumentacji pliku:
źródło