wie man den absoluten Pfad des aktuellen Arbeitsverzeichnisses von irb erhält


273

Ich verwende Ruby unter Windows, obwohl ich nicht weiß, ob das einen Unterschied machen sollte. Ich möchte nur den absoluten Pfad des aktuellen Arbeitsverzeichnisses abrufen. Ist das von irb aus möglich? Anscheinend ist es aus einem Skript möglichFile.expand_path(__FILE__)

Aber von irb habe ich Folgendes versucht und einen Fehler "Berechtigung verweigert" erhalten:

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

10
Die Frage ist eigentlich nicht klar: Möchten Sie a) das aktuelle Arbeitsverzeichnis (welches ist Dir.pwd) oder möchten Sie das Verzeichnis, in dem sich das aktuell ausgeführte Skript befindet (welches ist File.dirname(__FILE__))? Stellen Sie sich vor, Sie rufen ein Skript von irgendwo anders (wie ruby testdirectory/testscript.rb) hier auf, die beiden werden unterschiedlich sein!
Amenthes

1
@amenthes Sie behaupten, meine Frage sei unklar und fragen dann "Wollen Sie a) das aktuelle Arbeitsverzeichnis ..." und meine Frage lautet "Ich möchte nur den absoluten Pfad des aktuellen Arbeitsverzeichnisses ermitteln ...". Was ist unklar?
Dexygen

7
Es ist unklar wegen des Satzes "Anscheinend ist es aus einem Skript möglich, es zu verwenden File.expand_path(__FILE__)" - weil sein __FILE__Standort ein anderes Tier ist als das aktuelle Arbeitsverzeichnis (das heißt Dir.pwd).
Amenthes

2
@amenthes Ich dachte, ich habe einen ziemlich guten Job gemacht, indem ich "von irb", das genau dort im Titel der Frage steht (und zweimal in der Frage selbst), von "von einem Skript"
Dexygen

Antworten:


515

Dir.pwd scheint den Trick zu tun.

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


4
Es ist fast 10 Jahre her, aber trotzdem, danke für diese Antwort.
Nick Schwaderer

1
Hinweis: Dies gibt nicht den Speicherort der aktuellen Datei zurück. Lesen Sie dazu die Antworten unten. Dies gibt nur das aktuelle Arbeitsverzeichnis der Shell zurück, die das Skript aufruft (genau wie pwd). Dies kann sich an einem völlig anderen Ort befinden als der Ort, an dem sich die Skriptdatei befindet.
BIP2

186

File.expand_path File.dirname(__FILE__) gibt das Verzeichnis relativ zu der Datei zurück, aus der dieser Befehl aufgerufen wird.

Aber Dir.pwdkehren das Arbeitsverzeichnis (Ergebnisse identisch mit der Ausführung pwdin Ihrem Terminal)


3
Dir.pwdist äquivalent zu pwd -P. exec('pwd -L')wird das Äquivalent von pwd im Terminal erhalten (pwd ist normalerweise eine eingebaute Bash und löst keine symbolischen Links auf).
Barry Kelly

1
Bitte werfen Sie auch einen Blick auf die oft vergessene Pathname-Klasse: ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
awenkhh

1
Es gibt ein Problem. Dir.pwd druckt das Arbeitsverzeichnis, in dem das Skript ausgeführt wird - möglicherweise nicht das, was Sie möchten.
Brandon

Ja, vorausgesetzt, Sie führen den Befehl bundle exec rspec specim Verzeichnis '/ project' aus, während in der Datei 'spec / spec_helper.rb' der Wert von Dir.pwdweiterhin '/ project' lautet .
Hiveer


6

Dadurch erhalten Sie das Arbeitsverzeichnis der aktuellen Datei.

File.dirname(__FILE__)

Beispiel:

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

Ergebnis: "/ Users / nemrow / SITM / folder1 / folder2"


1
Bitte beachten Sie, dass das Arbeitsverzeichnis nicht mit der tatsächlichen Datei identisch sein darf. Also Dir.pwdund Ihr Vorschlag könnte möglicherweise abweichen.
Besi

4

Wenn Sie den vollständigen Pfad des Verzeichnisses der aktuellen rb-Datei abrufen möchten:

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

3

Auf diese Weise können Sie den absoluten Pfad jeder Datei in einem beliebigen Verzeichnis abrufen.

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

Dies wird zurückkehren

=> "/User/abc/xyz/some-dir/some-file-name"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.