comment obtenir le chemin absolu du répertoire de travail actuel depuis irb


273

J'exécute Ruby sur Windows mais je ne sais pas si cela devrait faire une différence. Tout ce que je veux faire, c'est obtenir le chemin absolu du répertoire de travail actuel. Est-ce possible avec irb? Apparemment, à partir d'un script, il est possible d'utiliserFile.expand_path(__FILE__)

Mais d'irb, j'ai essayé ce qui suit et j'ai obtenu une erreur "Autorisation refusée":

File.new(Dir.new(".").path).expand

10
La question n'est pas vraiment claire: voulez-vous a) le répertoire de travail actuel (qui est Dir.pwd) ou voulez-vous le répertoire où se trouve le script en cours d'exécution (qui est File.dirname(__FILE__))? Imaginez appeler un script de n'importe où ailleurs (comme ruby testdirectory/testscript.rb) ici, les deux seront différents!
amenthes

1
@amenthes Vous prétendez que ma question n'est pas claire et demandez ensuite "Voulez-vous a) le répertoire de travail actuel ...." et ma question dit "Tout ce que je veux faire est d'obtenir le chemin absolu du répertoire de travail actuel ...". Qu'est-ce qui n'est pas clair?
Dexygen

7
ce n'est pas clair à cause de la phrase "Apparemment, à partir d'un script, il est possible d'utiliser File.expand_path(__FILE__)" - parce que __FILE__l'emplacement est un animal différent du répertoire de travail actuel (qui est Dir.pwd).
amenthes

2
@amenthes Je pensais avoir fait un assez bon travail en différenciant "de irb" qui est juste là dans le titre de la question (et deux fois dans la question elle-même), de "à partir d'un script"
Dexygen

Réponses:


515

Dir.pwd semble faire l'affaire.

http://ruby-doc.org/core/Dir.html#method-c-pwd


4
Cela fait presque 10 ans, mais encore, merci pour cette réponse.
Nick Schwaderer

1
Remarque: cela ne renvoie pas l'emplacement du fichier actuel. Pour ce faire, consultez les réponses ci-dessous. Cela ne renvoie que le répertoire de travail actuel du shell qui appelle le script (comme pwd), qui pourrait être quelque part complètement différent de celui où se trouve le fichier de script.
GDP2

186

File.expand_path File.dirname(__FILE__) renverra le répertoire relatif au fichier à partir duquel cette commande est appelée.

Mais Dir.pwdretourne le répertoire de travail (résultats identiques à l'exécution pwddans votre terminal)


3
Dir.pwdest équivalent à pwd -P. exec('pwd -L')obtiendra l'équivalent de pwd dans le terminal (pwd est normalement un code bash intégré, et ne résout pas les liens symboliques).
Barry Kelly

1
jetez également un œil à la classe Pathname souvent oubliée: ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
awenkhh

1
Il y a un problème, Dir.pwd imprimera le répertoire de travail où le script est exécuté - ce qui n'est peut-être pas ce que vous voulez.
Brandon

Oui, en supposant que vous exécutez la commande bundle exec rspec specdans le répertoire '/ project', tandis que dans le fichier 'spec / spec_helper.rb', la valeur de Dir.pwdsera toujours '/ project'.
ruche


6

Cela vous donnera le répertoire de travail du fichier actuel.

File.dirname(__FILE__)

Exemple:

fichier_actuel: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"

résultat: "/ Users / nemrow / SITM / folder1 / folder2"


1
Veuillez noter que le répertoire de travail ne doit pas être le même que le fichier réel. Donc Dir.pwd, votre suggestion peut potentiellement différer.
Besi

4

Si vous souhaitez obtenir le chemin complet du répertoire du fichier rb actuel:

File.expand_path('../', __FILE__)

3

Grâce à cela, vous pouvez obtenir le chemin absolu de n'importe quel fichier situé dans n'importe quel répertoire.

File.join(Dir.pwd,'some-dir','some-file-name')

Cela reviendra

=> "/User/abc/xyz/some-dir/some-file-name"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.