Java ha il conveniente System.getProperty("user.home")
per ottenere la directory "home" dell'utente in modo indipendente dalla piattaforma. Qual è l'equivalente in Ruby? Non ho una scatola di Windows con cui giocare, e mi sento di fare affidamento su tilde nei nomi dei file non è il modo più pulito. Ci sono alternative?La multipiattaforma consente di ottenere la directory home dell'utente in Ruby?
risposta
Il metodo File.expand_path
utilizza la convenzione Unix di trattare la tilde (~
) appositamente, in modo che ~
riferisce alla directory home dell'utente corrente e ~foo
riferisce ad Home foo
s'.
Non so se c'è un modo migliore o più idiomatico, ma File.expand_path('~')
dovrebbe farti andare.
ENV["HOME"]
o ENV["HOMEPATH"]
dovrebbero darti quello che vuoi.
homes = ["HOME", "HOMEPATH"]
realHome = homes.detect {|h| ENV[h] != nil}
if not realHome
puts "Could not find home directory"
end
è vero per Windows, vero? – davetron5000
Credo sia: http://vlaurie.com/computers2/Articles/environment.htm –
@ davetron5000 Questo è ciò che sta facendo il mio codice, 'HOMEPATH' è una variabile di ambiente solo su Windows. –
Con Ruby 1.9 e versioni successive è possibile utilizzare Dir.home
.
Sulle piattaforme UNIX (Linux, OS X, ecc), ENV["HOME"]
, File.expandpath('~')
o Dir.home
tutto contare sulla variabile di ambiente HOME
fase di impostazione. Ma a volte scoprirai che la variabile d'ambiente non è impostata - questo è comune se stai eseguendo da uno script di avvio o da alcuni programmi di pianificazione in batch. Se siete in questa situazione, è ancora possibile ottenere la vostra home directory corretta tramite il seguente:
require 'etc'
Etc.getpwuid.dir
Detto questo, dal momento che la questione sta chiedendo un metodo di "cross-platform" va notato che questo non funzionerà su Windows (restituirà nil
lì). Su Windows, ENV["HOME"]
e i metodi sopra menzionati che si basano su di esso funzioneranno, nonostante la variabile HOME
non venga impostata comunemente su Windows - all'avvio, Ruby riempirà ENV["HOME"]
in base alle variabili di ambiente HOMEPATH
e HOMEDRIVE
. Se le variabili di ambiente HOMEDRIVE
e HOMEPATH
non sono impostate, questo non funzionerà. Non so quanto sia comune negli ambienti Windows e non conosco alcuna alternativa che funzioni su Windows.
Questa è la risposta corretta. Grazie per il puntatore al modulo etc. – ckruse
è vero su Windows, comunque? I documenti non indicano come tale – davetron5000
Dir.home aggiungendo in Ruby 1.9.? http://redmine.ruby-lang.org/issues/show/1027 – codecraig
Tutto in questa pagina funziona (almeno su Windows 7), ma penso che Dir.home e l'uso di tilde siano i migliori. – davetron5000