2010-11-16 21 views

Respuesta

74

El método File.expand_path usa la convención de Unix para el tratamiento de la tilde (~) especialmente, por lo que se refiere a ~ el directorio personal del usuario actual y ~foo se refiere al directorio principal foo 's.

No sé si hay una manera mejor o más idiomática, pero File.expand_path('~') debería ponerlo en marcha.

+1

es cierto en Windows, ¿verdad? Los documentos no indican como tal – davetron5000

+11

Dir.home añadiendo en Ruby 1.9.? http://redmine.ruby-lang.org/issues/show/1027 – codecraig

+5

Todo en esta página funciona (al menos en Windows 7), pero creo que dir.home y usar tilde parecen ser los mejores. – davetron5000

10

ENV["HOME"] o ENV["HOMEPATH"] debería darle lo que desea.

homes = ["HOME", "HOMEPATH"] 

realHome = homes.detect {|h| ENV[h] != nil} 

if not realHome 
    puts "Could not find home directory" 
end 
+0

es así en Windows, ¿verdad? – davetron5000

+0

Creo que es: http://vlaurie.com/computers2/Articles/environment.htm –

+0

@ davetron5000 Eso es lo que hace mi código, 'HOMEPATH' es una variable de entorno solo en Windows. –

8

en plataformas UNIX (Linux, OS X, etc.), ENV["HOME"], File.expandpath('~') o Dir.home todos confían en la variable de entorno que se está HOME conjunto. Pero a veces encontrará que la variable de entorno no está configurada; esto es común si está ejecutando desde un script de inicio o desde algunos programadores de proceso por lotes. Si estás en esta situación, usted todavía puede obtener el directorio de inicio correcta a través de lo siguiente:

require 'etc' 
Etc.getpwuid.dir 

Una vez dicho esto, ya que esta pregunta está pidiendo un método "multiplataforma" hay que señalar que este no funcionará en Windows (Etc.getpwuid devolverá allí nil). En Windows, ENV["HOME"] y los métodos mencionados anteriormente que dependen de él funcionarán, a pesar de que la variable HOME no se establece comúnmente en Windows: al inicio, Ruby completará ENV["HOME"] basado en las variables de entorno windows HOMEPATH y HOMEDRIVE. Si las variables de entorno windows HOMEDRIVE y HOMEPATH no están configuradas, entonces esto no funcionará. No sé qué tan común es realmente en los entornos de Windows, y no sé de ninguna alternativa que funcione en Windows.

+0

Esta es la respuesta correcta. Gracias por el puntero al módulo etc. – ckruse

Cuestiones relacionadas