tag section script schools samp rails 3school ruby cross-platform

ruby - script - w3 schools section



¿Multiplataforma significa obtener el directorio de inicio del usuario en Ruby? (4)

Con Ruby 1.9 y superior puedes usar Dir.home .

Java tiene el System.getProperty("user.home") para obtener el directorio "de inicio" del usuario de una manera independiente de la plataforma. ¿Cuál es el equivalente en Ruby? No tengo una caja de Windows con la que jugar, y tengo ganas de depender de las tildes en los nombres de archivo no es la manera más limpia. ¿Hay alternativas?


El método File.expand_path utiliza la convención de Unix de tratar la tilde ( ~ ) especialmente, de modo que ~ refiere al directorio de inicio del usuario actual y ~foo refiere al directorio de inicio de foo .

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


En plataformas Unix (Linux, OS X, etc.), ENV["HOME"] , File.expandpath(''~'') o Dir.home dependen de la variable de entorno HOME configurada. 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 se encuentra en esta situación, aún puede obtener su directorio de inicio correcto a través de lo siguiente:

require ''etc'' Etc.getpwuid.dir

Una vez dicho esto, dado que esta pregunta requiere un método "multiplataforma", debe tenerse en cuenta que esto no funcionará en Windows ( Etc.getpwuid devolverá nil ). En Windows, ENV["HOME"] y el 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"] según las variables de entorno HOMEPATH y HOMEDRIVE . Si las variables de entorno de Windows HOMEDRIVE y HOMEPATH no están configuradas, 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.


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