Java a la System.getProperty("user.home")
pratique pour obtenir le répertoire "home" de l'utilisateur d'une manière indépendante de la plateforme. Quel est l'équivalent en Ruby? Je n'ai pas de boîte Windows avec laquelle jouer, et j'ai l'impression que compter sur des tildes dans les noms de fichiers n'est pas le moyen le plus propre. Existe-t-il des alternatives?
La méthode File.expand_path
utilise la convention Unix de traitement spécial du tilde (~
), De sorte que ~
Fait référence au répertoire personnel de l'utilisateur actuel et ~foo
Fait référence au répertoire personnel de foo
.
Je ne sais pas s'il existe une méthode meilleure ou plus idiomatique, mais File.expand_path('~')
devrait vous aider.
Avec Ruby 1.9 et plus, vous pouvez utiliser Dir.home
.
Sur les plates-formes Unix (linux, OS X, etc.), ENV["HOME"]
, File.expandpath('~')
ou Dir.home
Dépendent tous de la variable d'environnement HOME
définie. Mais parfois, vous constaterez que la variable d'environnement n'est pas définie - cela est courant si vous exécutez à partir d'un script de démarrage ou de certains planificateurs de 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 "multiplateforme", il faut noter que cela ne fonctionnera pas sous Windows (Etc.getpwuid
Y renverra nil
.) Sous Windows, ENV["HOME"]
Et les méthodes mentionnées ci-dessus qui en dépendent fonctionneront, bien que la variable HOME
ne soit pas couramment définie sur Windows - au démarrage, Ruby remplira dans ENV["HOME"]
en 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.
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
Cela fonctionne sur tous les systèmes d'exploitation
Dir.home
Dir.home('username')
Remarque: Le nom d'utilisateur est sensible à la casse sous Linux mais pas sous Windows ou macOS