2010-11-16 4 views

risposta

74

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.

+1

è vero su Windows, comunque? I documenti non indicano come tale – davetron5000

+11

Dir.home aggiungendo in Ruby 1.9.? http://redmine.ruby-lang.org/issues/show/1027 – codecraig

+5

Tutto in questa pagina funziona (almeno su Windows 7), ma penso che Dir.home e l'uso di tilde siano i migliori. – davetron5000

10

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 
+0

è vero per Windows, vero? – davetron5000

+0

Credo sia: http://vlaurie.com/computers2/Articles/environment.htm –

+0

@ davetron5000 Questo è ciò che sta facendo il mio codice, 'HOMEPATH' è una variabile di ambiente solo su Windows. –

82

Con Ruby 1.9 e versioni successive è possibile utilizzare Dir.home.

8

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.

+0

Questa è la risposta corretta. Grazie per il puntatore al modulo etc. – ckruse