Lo siguiente falla Errno::ENOENT: No such file or directory
, incluso si el archivo existe:
open('~/some_file')
Sin embargo, puedo hacer esto:
open(File.expand_path('~/some_file'))
Tengo dos preguntas:
- ¿Por qué no
open
procesa la tilde como apuntando al directorio de inicio? - ¿Hay alguna manera más hábil que
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
para que funcione en ambos casos.No estoy seguro de si esto estaba disponible antes de Ruby 1.9.3, pero creo que la solución más elegante es usar la
Dir.home
que es parte del núcleo.fuente
En lugar de confiar en que la
$HOME
variable de entorno esté configurada correctamente, lo que podría ser una molestia cuando usa computadoras de red compartidas para el desarrollo, puede obtener esto de Ruby usando:Creo que esto identifica al usuario que ha iniciado sesión actual y obtiene su directorio de inicio en lugar de depender de la
$HOME
variable de entorno global que se establece. Esta es una solución alternativa a la anterior, creo.fuente
Descubrí el problema de la tilde y se creó un parche para agregar
absolute_path
que trata la tilde como un carácter ordinario.De la documentación del archivo:
fuente