কীভাবে বর্তমান ওয়ার্কিং ডিরেক্টরিটির irb থেকে নিখুঁত পথ পাবেন


273

আমি উইন্ডোজে রুবি চালাচ্ছি যদিও আমি জানি না যে এটির কোনও পার্থক্য হওয়া উচিত কিনা। আমি কেবল যা করতে চাই তা হ'ল বর্তমান কার্যনির্বাহী ডিরেক্টরিটির পরম পাথ। আইআরবি থেকে কি এটি সম্ভব? দৃশ্যত কোনও স্ক্রিপ্ট থেকে এটি ব্যবহার করা সম্ভবFile.expand_path(__FILE__)

তবে আইআরবি থেকে আমি নিম্নলিখিতটি চেষ্টা করেছিলাম এবং "অনুমতি অস্বীকার" ত্রুটি পেয়েছি:

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

10
প্রশ্নটি আসলে পরিষ্কার নয়: আপনি কি ক) বর্তমান চলমান ডিরেক্টরিটি (যা Dir.pwd) চান বা আপনি বর্তমানে যে চলমান স্ক্রিপ্টটি অবস্থিত (যেটি File.dirname(__FILE__)) ডিরেক্টরিটি চান? ruby testdirectory/testscript.rbএখানে অন্য কোথাও (যেমন ) থেকে কোনও স্ক্রিপ্ট কল করার কল্পনা করুন, দুটি আলাদা হবে!
amenthes

1
@ উদাহরণস্বরূপ আপনি দাবি করেন যে আমার প্রশ্নটি অস্পষ্ট এবং তারপরে "আপনি কি একটি) বর্তমান কার্যনির্বাহী ডিরেক্টরিটি জিজ্ঞাসা করুন ...." এবং আমার প্রশ্নে "আমি যা করতে চাই তা হ'ল বর্তমান কার্যনির্বাহী ডিরেক্টরিটির পরম পথ পেতে হবে ..."। অস্পষ্ট কি?
অক্সিজেন

7
"স্পষ্টত কোনও স্ক্রিপ্ট থেকে এটি ব্যবহার করা সম্ভব File.expand_path(__FILE__)" - এই বাক্যটির কারণে এটি অস্পষ্ট কারণ এটির __FILE__অবস্থান বর্তমান ওয়ার্কিং ডিয়ারের চেয়ে আলাদা প্রাণী (যা Dir.pwd)।
অ্যান্থেস

2
@ প্রথমগুলি আমি ভেবেছিলাম যে আমি "আইআরবি" থেকে আলাদা করে একটি খুব ভাল কাজ করেছি যা প্রশ্নের শিরোনামে রয়েছে (এবং প্রশ্নের মধ্যে নিজেই দু'বার) "স্ক্রিপ্ট থেকে"
ডিজিওন

উত্তর:


515

Dir.pwd কৌশলটি মনে হচ্ছে।

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


4
এটি প্রায় 10 বছর কেটে গেছে, তবুও, এই উত্তরের জন্য আপনাকে ধন্যবাদ।
নিক শোয়াদেয়ার

1
দ্রষ্টব্য: এটি বর্তমান ফাইলের অবস্থান ফিরিয়ে দেয় না । এটি করার জন্য, নীচের উত্তরগুলি দেখুন। এটি কেবলমাত্র শেল যা (ঠিক মত স্ক্রিপ্ট কল করছে এর সাম্প্রতিক কাজ করা ফেরৎ pwd), যা কোথাও সম্পূর্ণরূপে যেখানে স্ক্রিপ্ট ফাইল অবস্থিত চেয়ে ভিন্ন হতে পারে।
জিডিপি 2

186

File.expand_path File.dirname(__FILE__) এই কমান্ড থেকে যে ফাইলটি ডেকে আনা হয়েছে সেই ফাইলের সাথে সম্পর্কিত ডিরেক্টরিটি ফিরিয়ে দেবে।

কিন্তু Dir.pwdকার্যকরী ডিরেক্টরিটি ফেরত দেয় (ফলাফলগুলি pwdআপনার টার্মিনালে কার্যকর করার অনুরূপ )


3
Dir.pwdসমতূল্য pwd -Pexec('pwd -L')টার্মিনালে পিডাব্লুডির সমতুল্য পাবেন (পিডব্লিউডি সাধারণত একটি ব্যাশ বিল্টিন, এবং প্রতীকী লিঙ্কগুলি সমাধান করে না)।
ব্যারি কেলি

1
দয়া করে প্রায়শই ভুলে যাওয়া পাঠনাম
ডোক.আর.অর্গ

1
একটি সমস্যা আছে, Dir.pwd স্ক্রিপ্টটি কোথায় চালিত হয়েছে তার কার্যকারী ডিরেক্টরি মুদ্রণ করবে - যা আপনি চান তা নাও হতে পারে।
ব্র্যান্ডন

হ্যাঁ, ধরে bundle exec rspec specনিই যে আপনি ডিরেক্টরি '/ প্রজেক্ট' এ কমান্ড চালাচ্ছেন , যখন ফাইল 'স্পেস / স্পেস_হেল্পার.আরবি' রয়েছে, Dir.pwdতখনও এর মান '/ প্রকল্প' হবে।
হাইভের

59

বর্তমান এক্সিকিউটিভ স্ক্রিপ্টের সাথে সম্পর্কিত পাথের ক্ষেত্রে যেমন রুবি ২.০ আপনি ব্যবহার করতে পারেন

__dir__

সুতরাং এটি মূলত একই

File.dirname(__FILE__)


এটি স্ক্রিনটি যেখানে চালিত হয়েছে তার কার্যকরী ডিরেক্টরি মুদ্রণ করবে @ ব্র্যান্ডন বলেছে।
aldrien.h

6

এটি আপনাকে বর্তমান ফাইলটির কার্যকরী ডিরেক্টরি দেবে।

File.dirname(__FILE__)

উদাহরণ:

কারেন্ট_ফাইল: "/ ব্যবহারকারী / নেমরো / এসআইটিএম / ফোল্ডার 1/ ফোল্ডার 2/amazon.rb"

ফলাফল: "/ ব্যবহারকারী / নিমরো / এসআইটিএম / ফোল্ডার 1 / ফোল্ডার 2"


1
দয়া করে নোট করুন যে কার্যকারী ডিরেক্টরিটি অবশ্যই আসল ফাইলের মতো হবে না। সুতরাং Dir.pwdএবং আপনার পরামর্শ সম্ভবত পৃথক হতে পারে।
বেসি

4

আপনি যদি বর্তমান আরবি ফাইলের ডিরেক্টরিটির সম্পূর্ণ পথ পেতে চান:

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

3

এর মাধ্যমে আপনি যে কোনও ডিরেক্টরিতে অবস্থিত যে কোনও ফাইলের পরম পাথ পেতে পারেন।

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

এই ফিরে আসবে

=> "/User/abc/xyz/some-dir/some-file-name"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.