হোম ডিরেক্টরি সম্পর্কিত ফাইলগুলি কীভাবে খুলবেন


95

Errno::ENOENT: No such file or directoryফাইলটি বিদ্যমান থাকলেও নিম্নলিখিতটি ব্যর্থ হয় :

open('~/some_file')

তবে, আমি এটি করতে পারি:

open(File.expand_path('~/some_file'))

আমার দুটি প্রশ্ন আছে:

  1. কেন openহোম ডিরেক্টরিতে নির্দেশ করে টিলড প্রক্রিয়া করে না ?
  2. এর চেয়ে স্মার্ট উপায় আছে কি File.expand_path?

উত্তর:


109
  1. শেল (বাশ, জেডএস, ইত্যাদি) ওয়াইল্ডকার্ড প্রসারণের জন্য দায়ী, সুতরাং আপনার প্রথম উদাহরণে কোনও শেল নেই, অতএব কোনও প্রসার নেই। টিলডকে নির্দেশ করে $HOMEনিছক কনভেনশন; প্রকৃতপক্ষে, আপনি যদি ডকুমেন্টেশনের দিকে তাকান File.expand_path, এটি টিলডকে সঠিকভাবে ব্যাখ্যা করে তবে এটি নিজেই ফাংশনের একটি বৈশিষ্ট্য, অন্তর্নিহিত সিস্টেমের অন্তর্নিহিত কিছু নয়; এছাড়াও, পরিবেশের পরিবর্তনশীল সঠিকভাবে সেট করা File.expand_pathপ্রয়োজন $HOMEto যা আমাদের সম্ভাব্য বিকল্পে নিয়ে আসে ...
  2. এটা চেষ্টা কর:

    open(ENV['HOME']+'/some_file')
    

আমি আশা করি এটি যথেষ্ট চিকিত্সা। আমি ব্যক্তিগতভাবে মনে করি এনভায়রনমেন্ট ভেরিয়েবলটি ব্যবহারের চেয়ে শব্দার্থগতভাবে পরিষ্কার expand_path


উইন্ডো ব্যবহার করে .. করতে হয়েছিলopen(ENV['HOME']+'some_file')
ডেভিড পশ্চিম

9
ব্যবহার করুন কেবল File.join(ENV['HOME'], '/some_file')এটা উভয় ক্ষেত্রেই কাজ করে।
মার্সিন বিলস্কি

123

রুবি ১.৯.৩ এর আগে এটি উপলব্ধ ছিল কিনা তা নিশ্চিত নই তবে আমি দেখতে পেয়েছি যে সবচেয়ে মার্জিত সমাধানটি Dir.homeমূল অংশ যা ব্যবহার করা হয়।

open("#{Dir.home}/some_file")

4
নাহ, 1.9.3 ( apidock.com/ruby/v1_9_2_180/Dir/home/class ) এর নীচের ব্যবহারকারীদের কাছে উপলভ্য নয় ।
আয়ান ভোগান

13

এর উপর নির্ভর করার পরিবর্তে $HOMEএনভায়রনমেন্ট ভেরিয়েবল সঠিকভাবে সেট করা হচ্ছে, যখন আপনি উন্নয়নে শেয়ার করা নেটওয়ার্ক কম্পিউটার ব্যবহার যা ঝগড়া হতে পারে, আপনি ব্যবহার রুবি থেকে এই পেতে পারে:

require 'etc'
open ("#{Etc.getpwuid.dir}/some_file")

আমি বিশ্বাস করি এটি বর্তমান লগ-ইন করা ব্যবহারকারীকে সনাক্ত করে এবং বৈশ্বিক $HOMEপরিবেশ পরিবর্তনশীল সেট হওয়ার কারণে তাদের হোম ডিরেক্টরিটি পায় । এটি উপরের আই গণনার বিকল্প সমাধান।


2

টিলড সমস্যাটি আমি আবিষ্কার করেছি এবং একটি প্যাচ তৈরি করা হয়েছিল absolute_path যাতে টিল্ডকে সাধারণ চরিত্র হিসাবে বিবেচনা করা হয়।

ফাইল ডকুমেন্টেশন থেকে:

absolute_path(file_name [, dir_string] ) → abs_file_name

একটি পাথের নামকে একটি পরম পথনামে রূপান্তর করে। প্রক্রিয়াটির বর্তমান কার্যনির্বাহী ডিরেক্টরি থেকে আপেক্ষিক পাথ উল্লেখ করা হয় যতক্ষণ না dir_string দেওয়া হয়, এক্ষেত্রে এটি প্রারম্ভিক পয়েন্ট হিসাবে ব্যবহৃত হবে। যদি প্রদত্ত পথের নামটি একটি "~" দিয়ে শুরু হয় তবে এটি প্রসারিত হয় না, এটি একটি সাধারণ ডিরেক্টরি নাম হিসাবে বিবেচনা করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.