Moyens multi-plateformes pour obtenir le répertoire personnel de l’utilisateur dans Ruby?

Java a le System.getProperty("user.home") convoité System.getProperty System.getProperty("user.home") pour obtenir le répertoire “home” de l’utilisateur d’une manière indépendante de la plate-forme. Quel est l’équivalent en Ruby? Je n’ai pas de boîtier Windows avec lequel je peux jouer, et je pense que compter sur des tildes dans les noms de fichiers n’est pas la méthode la plus propre. Y a-t-il des alternatives?

La méthode File.expand_path utilise la convention Unix pour traiter le tilde ( ~ ) spécialement, de sorte que ~ réfère au répertoire de base de l’utilisateur actuel et que ~foo réfère au répertoire de base de foo .

Je ne sais pas s’il y a une manière meilleure ou plus idiomatique, mais File.expand_path('~') devrait vous faire avancer.

Avec Ruby 1.9 et Dir.home vous pouvez utiliser Dir.home .

ENV["HOME"] ou ENV["HOMEPATH"] devrait vous donner ce que vous voulez.

 homes = ["HOME", "HOMEPATH"] realHome = homes.detect {|h| ENV[h] != nil} if not realHome puts "Could not find home directory" end 

Sur les plates-formes Unix (Linux, OS X, etc.), ENV["HOME"] , File.expandpath('~') ou Dir.home reposent tous sur la variable d’environnement HOME définie. Mais parfois, vous constaterez que la variable d’environnement n’est pas définie – c’est courant si vous exécutez à partir d’un script de démarrage ou de certains planificateurs de traitement par lots. Si vous êtes dans cette situation, vous pouvez toujours obtenir votre répertoire personnel correct via les éléments suivants:

 require 'etc' Etc.getpwuid.dir 

Cela dit, comme cette question demande une méthode “multi-plateforme”, il faut noter que cela ne fonctionnera pas sous Windows ( Etc.getpwuid y retournera nil .) Sous Windows, ENV["HOME"] et le Les méthodes mentionnées ci-dessus, qui en dépendent, fonctionneront, bien que la variable HOME ne soit pas communément définie sous Windows – au démarrage, Ruby remplira ENV["HOME"] fonction des variables d’environnement Windows HOMEPATH et HOMEDRIVE . Si les variables d’environnement Windows HOMEDRIVE et HOMEPATH ne sont pas définies, cela ne fonctionnera pas. Je ne sais pas à quel point cela est courant dans les environnements Windows, et je ne connais aucune alternative qui fonctionne sur Windows.