mevcut çalışma direktörünün mutlak yolunu irb'den nasıl alabilirim


273

Bir fark yaratıp yaratmayacağını bilmiyorum ama Windows üzerinde Ruby çalıştırıyorum. Tek yapmak istediğim şu anki çalışan direktörün mutlak yolunu bulmak. Bu irb'den mümkün mü? Görünüşe göre bir komut dosyasından kullanmak mümkündürFile.expand_path(__FILE__)

Ancak irb'den aşağıdakileri denedim ve "İzin verilmedi" hatası aldım:

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

10
Soru aslında net değil: a) geçerli çalışma dizinini (hangisi Dir.pwd) istiyor musunuz yoksa şu anda çalışan betiğin bulunduğu dizini mi istiyorsunuz (hangisi File.dirname(__FILE__))? Senaryoyu başka bir yerden çağırmayı düşün ( ruby testdirectory/testscript.rbburada), ikisi farklı olacak!
15:15 de amenthes

1
@amenthes Sen "Yapmak istediğim olsun benim sorum belirsizdir iddia ve daha sonra sor ") Bir istiyorsunuz Geçerli çalışma dizini ...." ve benim soru devletler geçerli çalışma dizinin ... mutlak yolunu". Belirsiz olan nedir?
Dexygen

7
"Görünüşe göre bir senaryodan kullanmak mümkündür" cümlesinden dolayı belirsizdir File.expand_path(__FILE__)- çünkü __FILE__konumu şu andaki çalışma dizininden (ki Dir.pwd) farklı bir hayvandır .
amenthes

2
@amenthes Sorunun başlığında (ve sorunun kendisinde iki kez), "bir senaryodan", "irb" den ayıran oldukça iyi bir iş yaptığımı düşündüm
Dexygen

Yanıtlar:


515

Dir.pwd hile yapıyor gibi görünüyor.

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


4
Neredeyse 10 yıl geçti, ama yine de, bu cevap için teşekkür ederim.
Nick Schwaderer

1
Not: Bu mu değil şimdiki dosyasının konumunu döndürür. Bunu yapmak için aşağıdaki cevaplara bakın. Bu, yalnızca komut dosyasını çağıran kabuğun geçerli çalışma dizinini döndürür (tıpkı komut dosyası gibi pwd) ve komut dosyasının bulunduğu yerden tamamen farklı bir yerde olabilir.
GDP2

186

File.expand_path File.dirname(__FILE__) bu komutun çağrıldığı dosyaya göre dizini döndürür.

Ancak Dir.pwdçalışma dizinini döndürür ( pwdterminalinizde yürütme ile aynı sonuçlar )


3
Dir.pwdeşittir pwd -P. exec('pwd -L')terminalde pwd eşdeğerini alacaktır (pwd normalde bir bash yerleşiktir ve sembolik bağlantıları çözmez).
Barry Kelly

1
lütfen sık sık unutulan Pathname sınıfına da bir göz atın: ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
awenkhh

1
Bir sorun varsa, Dir.pwd betiğin çalıştığı dizini yazdıracaktır - bu sizin istediğiniz olmayabilir.
Brandon

Evet, bundle exec rspec spec'spec / spec_helper.rb' dosyasındayken '/ project' dizininde komut çalıştırdığınızı varsayarsak , değeri Dir.pwdhala '/ project' olur.
Hiveer


6

Bu size geçerli dosyanın çalışma dizinini verecektir.

File.dirname(__FILE__)

Misal:

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

sonuç: "/ Kullanıcılar / nemrow / SITM / klasör1 / klasör2"


1
Çalışma dizininin gerçek dosya ile aynı olmaması gerektiğini lütfen unutmayın. Dolayısıyla Dir.pwdönerileriniz potansiyel olarak farklı olabilir.
Besi

4

Geçerli rb dosyasının dizininin tam yolunu almak istiyorsanız:

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

3

Bu sayede herhangi bir dizinde bulunan herhangi bir dosyanın mutlak yolunu elde edebilirsiniz.

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

Bu geri dönecek

=> "/User/abc/xyz/some-dir/some-file-name"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.