2009-12-23 8 views
4

J'ai besoin d'accéder aux fichiers relatifs à l'emplacement de mon script Ruby.Accéder aux fichiers dans le même répertoire que le script

La seule solution que j'ai trouvée utilise File.dirname(__FILE__), cependant, si le script est exécuté à partir d'un lien symbolique, __FILE__ indique l'emplacement du lien symbolique.

Je préférerais une solution qui n'implique pas de regarder __FILE__, en vérifiant si c'est un lien, si c'est le cas, de découvrir où il pointe. Mais, s'il n'y a pas d'autre moyen, il serait bon de savoir s'il y a déjà une gemme pour le faire?

Répondre

4

File.expand_path help?

(n'ont pas une « boîte à nix pour l'essayer)

+0

oui qui résout les liens symboliques (au moins sur mac osx) – ennuikiller

+0

Ne fonctionne pas sur le mien , aussi OS X. Peut-être y a-t-il une option qui doit être réglée pour cela? J'utilise 'File.dirname (File.expand_path (__ FILE __))' –

+0

J'utilise simplement File.expand_path (".") Pour un répertoire symlinked. Je cours ruby ​​1.9 sur max osx 10.6 – ennuikiller

1

Vous pouvez toujours exécuter une commande shell comme ls -l $ (pwd) avec popen et l'analyser pour suivre le lien symbolique. Pour les fenêtres, vous devez simplement exécuter la commande windows os équivalente (que je suppose exister!)

+0

Cela ne fonctionnera pas sous Windows. –

+0

comment obtenez-vous même un «lien symbolique» sur Windows? – AShelly

+0

Vous ne pouvez pas, mais j'ai besoin du script pour fonctionner correctement sur Windows et * nix. (Windows a un format de fichier propriétaire qui agit comme un lien symbolique sur Windows, cependant, ce sont les fichiers .lnk) –

3

Je préfère la variante suivante: File.expand_path('../other_file_in_same_dir', __FILE__)

Le second argument est le point où le chemin relatif va s'élargie. Cela vaut par défaut pour le répertoire de travail actuel.

Questions connexes