68 votes

Multiplate-forme des moyens d'obtenir le répertoire personnel de l'utilisateur en Ruby?

Java dispose des connaissances appropriées System.getProperty("user.home") pour obtenir le répertoire "home" de l'utilisateur de manière indépendante de la plate-forme. Quel est l'équivalent en rubis? Je n'ai pas de machine Windows avec laquelle jouer, et je sens que me fier aux tildes dans les noms de fichiers n'est pas la méthode la plus propre. Y a-t-il des alternatives?

118voto

Pioz Points 1247

Avec Ruby 1.9, vous pouvez utiliser Dir.home .

98voto

Jörg W Mittag Points 153275

La méthode File.expand_path utilise la convention Unix de traitement spécial du tilde ( ~ ), de sorte que ~ réfère au répertoire de base de l'utilisateur actuel et ~foo fait référence au répertoire personnel de foo .

Je ne sais pas s'il existe un moyen meilleur ou plus idiomatique, mais File.expand_path('~') devrait vous aider.

11voto

Micah Points 814

Sur les plates-formes unix (linux, OS X, etc), ENV["HOME"], File.expandpath('~') ou Dir.home tous compter sur l' HOME variable d'environnement définie. Mais parfois, vous verrez que la variable d'environnement n'est pas définie--ce qui est commun si vous êtes en cours d'exécution à partir d'un script de démarrage, ou de certains lots de planificateurs. Si vous êtes dans cette situation, vous pouvez toujours obtenir votre répertoire d'accueil via le suivant:

require 'etc'
Etc.getpwuid.dir

Ayant dit que, puisque cette question est de demander un "cross-platform" la méthode, il faut noter que cela ne fonctionne pas sur Windows (Etc.getpwuid sera de retour nil , là.) Sur Windows, ENV["HOME"] et les méthodes mentionnées ci-dessus, qui s'appuient sur le travail, malgré l' HOME variable n'étant pas couramment définie sur Windows--au démarrage, Ruby va remplir ENV["HOME"] basé sur windows HOMEPATH et HOMEDRIVE variables d'environnement. Si les fenêtres HOMEDRIVE et HOMEPATH variables d'environnement ne sont pas réglée, alors cela ne fonctionnera pas. Je ne sais pas comment commun qui est réellement dans les environnements Windows, et je ne sais pas de toute solution alternative qui fonctionne sur Windows.

10voto

Jacob Relkin Points 90729

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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X