Folgendes schlägt fehl Errno::ENOENT: No such file or directory
, auch wenn die Datei vorhanden ist:
open('~/some_file')
Ich kann dies jedoch tun:
open(File.expand_path('~/some_file'))
Ich habe zwei Fragen:
- Warum
open
wird die Tilde nicht so verarbeitet, dass sie auf das Ausgangsverzeichnis verweist? - Gibt es einen schlaueren Weg als
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
, damit es in beiden Fällen funktioniert.Ich bin mir nicht sicher, ob dies vor Ruby 1.9.3 verfügbar war, aber ich finde, dass die eleganteste Lösung darin besteht, das zu verwenden,
Dir.home
was Teil des Kerns ist.quelle
Anstatt sich darauf zu verlassen, dass die
$HOME
Umgebungsvariable richtig eingestellt ist, was ein Problem sein kann, wenn Sie gemeinsam genutzte Netzwerkcomputer für die Entwicklung verwenden, können Sie dies von Ruby mit folgenden Informationen erhalten:Ich glaube, dies identifiziert den aktuell angemeldeten Benutzer und erhält sein Ausgangsverzeichnis, anstatt sich auf die festgelegte globale
$HOME
Umgebungsvariable zu verlassen. Dies ist meiner Meinung nach eine alternative Lösung zu den oben genannten.quelle
Ich habe das Tilde-Problem entdeckt und einen Patch erstellt,
absolute_path
der Tilde als gewöhnliches Zeichen behandelt.Aus der Dateidokumentation:
quelle