পাথ সিনট্যাক্স বিধি


10

আমি ইউনিক্স পাথের স্ট্রিংগুলিতে কারসাজি করার জন্য একটি গ্রন্থাগার লিখছি। এটি হ'ল, আমার সিনট্যাক্সের কয়েকটি অস্পষ্ট কোণ বুঝতে হবে যা বেশিরভাগ লোকেরা উদ্বিগ্ন হবে না।

উদাহরণস্বরূপ, আমি যতটা বলতে পারি সর্বোত্তম, এটি মনে হয় foo/barএবং foo//barউভয়ই একই জায়গায় নির্দেশ করে।

এছাড়াও, ~সাধারণত ব্যবহারকারীর হোম ডিরেক্টরি বোঝায় তবে কী যদি এটি কোনও পথের মাঝখানে উপস্থিত হয় ? তাহলে কি হয়?

এই এবং কয়েক ডজন অন্যান্য অস্পষ্ট প্রশ্নের উত্তর দেওয়া দরকার যদি আমি কোড লিখতে যাচ্ছি যা প্রতিটি সম্ভাব্য কেস সঠিকভাবে পরিচালনা করে। কেউ কি এমন কোনও নির্দিষ্ট রেফারেন্স সম্পর্কে জানেন যা এই স্টাফের জন্য সঠিক সিনট্যাক্সের বিধিগুলি ব্যাখ্যা করে ?

(দুর্ভাগ্যক্রমে, "ইউনিক্স পাথ সিনট্যাক্স" এর মতো পদগুলির সন্ধানের ফলে $PATHভেরিয়েবলটি নিয়ে আলোচনা করা মিলিয়ন পৃষ্ঠাগুলি সজ্জিত হয় ... হেক, আমি এমনকি এই প্রশ্নের উপযুক্ত ট্যাগগুলি খুঁজে পেতে লড়াই করছি!)


ঠিক আছে il টিল্ড এবং-ফাইলের প্রসারণ কোনও ইউনিক্স পরিবেশের POSIX সংজ্ঞায়িত বৈশিষ্ট্যগুলি অন্তর্নিহিত। কয়েকটি টিপস: একটি ফাইলের নাম \ 0 বা / ব্যতীত অন্য কোনও জিনিস হতে পারে । ////// এবং / একই জিনিস। W পিডব্লিউডি কার্নেলে হ্যান্ডেল করা হয় এবং যে কোনও (লিনাক্স) প্রসেসের জন্য / proc এ পড়তে পারে । /./ কেবল পথের গোড়ায় ঘটতে পারে। AT পাঠ :: ::::: তে এবং: একই জিনিস। / dev / নাল / দেব / টিটি এবং / টিএমপি হ'ল প্রতিটি সংগত সিস্টেমের জন্য পজিএক্স গ্যারান্টিযুক্ত পাথ।
মাইকজার্ভ

1
আপনার বেশিরভাগ প্রশ্ন (তবে অংশটি নয় ~) isেকে দেওয়া হয়েছে কীভাবে লিনাক্স একাধিক পাথ বিভাজক (/ হোম //// ব্যবহারকারীর নাম /// ফাইল) পরিচালনা করে । একটি আদর্শগত রেফারেন্সের নিকটতম জিনিসটি হবে পসিক্স বা একক ইউনিক্সের স্পেসিফিকেশন - সহজ পড়া নয়।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

উত্তর:


13

তিন ধরণের পাথ রয়েছে:

  • আপেক্ষিক পাথ পছন্দ foo, foo/bar, ../a, .। এগুলি শুরু হয় না /এবং সেই পথে একটি সিস্টেম কল করার প্রক্রিয়াটির বর্তমান ডিরেক্টরি সম্পর্কিত relative
  • মত পরম পাথ /, /foo/barবা ///x। এগুলি 1 বা 3 বা আরও বেশি দিয়ে শুরু হয় /, তারা আপেক্ষিক নয়, /মূল ডিরেক্টরি থেকে শুরু করে সন্ধান করা হয় ।
  • পসিক্স //fooবিশেষভাবে চিকিত্সা করার অনুমতি দেয় তবে কীভাবে তা নির্দিষ্ট করে না। কিছু সিস্টেম নেটওয়ার্ক ফাইলগুলির মতো বিশেষ ক্ষেত্রে এটি ব্যবহার করে । এটি ঠিক 2 টি স্ল্যাশ হতে হবে।

শুরুতে বাদে স্ল্যাশগুলির ক্রমগুলি এর মতো কাজ করে।

~এটি কেবল শেলের জন্য বিশেষ , এটি শেল দ্বারা প্রসারিত, এটি সিস্টেমের ক্ষেত্রে মোটেই বিশেষ নয়। এটি কীভাবে প্রসারিত হবে তা শেল নির্ভর। শেলগুলি গ্লোব্বিং ( *.txt) বা ভেরিয়েবল সম্প্রসারণ /$foo/$barবা অন্যদের মতো বিস্তৃতিগুলির অন্যান্য ধরণের কাজ করে। যতদূর সিস্টেম সম্পর্কিত ~foo, কেবল _fooবা এর মতো একটি আপেক্ষিক পথ foo

মনে রাখা বিষয়গুলি:

  • foo/হিসাবে একই হয় না foo। এটা তোলে কাছাকাছি foo/.তুলনায় foo(বিশেষত যদি fooসবচেয়ে সিস্টেমে সবচেয়ে সিস্টেম কলের জন্য একটি সিমবলিক লিঙ্ক হয়) ( foo//হিসাবে একই foo/যদিও)।
  • a/b/../cঅগত্যা একইরকম নয় a/c(উদাহরণস্বরূপ যদি a/bএকটি সিমলিংক হয়)। সেরা ..বিশেষভাবে চিকিত্সা না করা ।
  • এটি সাধারণত a/././././bহিসাবে বিবেচনা করা নিরাপদ a/b

তাই সংক্ষেপে বলা, আমি যদি শেল পথ ম্যানিপুলেশন যত্ন সম্পর্কে না (যা সুবিশাল ও জটিল), আমি শুধুমাত্র যত্নের প্রয়োজন /, .এবং ..(?)
MathematicalOrchid

//fooপরিচালনার উদাহরণ সাইগউইন, যেখানে এটি ইউএনসি পাথের জন্য ব্যবহৃত হয় । এটি হ'ল //server/share/dir/file.txtএকটি আইনী পথ যা ডিফল্টরূপে অফ-সিস্টেমকে নির্দেশ করে। সাইগউইন যদি খুঁজে না পান তবে স্থানীয় সিস্টেমটির দিকে ফিরে তাকান server
ওয়ারেন ইয়ং

3

উদাহরণস্বরূপ, আমি যতটা বলতে পারি সর্বোত্তম, মনে হয় foo / বার এবং foo // বার উভয়ই একই জায়গায় নির্দেশ করে।

হ্যাঁ. এটি সাধারণ কারণ সফ্টওয়্যার মাঝেমধ্যে এমন একটি পথকে সম্মতি দেয় যা প্রথম অংশটি ফরোয়ার্ড স্ল্যাশ দিয়ে শেষ করা হয়নি, সুতরাং এটি নিশ্চিত করার জন্য একটিটিকে নিক্ষেপ করা হয় (যার অর্থ সেখানে দুটি বা তার বেশি হতে পারে)। foo///barএবং foo/////barএকই জায়গায় নির্দেশ করুন foo/bar। পাথ ম্যানিপুলেশন লাইব্রেরির জন্য একটি দুর্দান্ত ফাংশনটি হ'ল যা কোনও একের পরিকল্পিত স্ল্যাশগুলির সংখ্যা হ্রাস করে (কোনও পাথের প্রারম্ভিক ব্যতীত, যেখানে এটি ইউআরএল-ইশ পথে ব্যবহার করা যেতে পারে, বা স্টিফেন যেমন উল্লেখ করেছেন, যে কোনওটির জন্য অনির্দিষ্ট বিশেষ উদ্দেশ্য)।

এছাড়াও, ~ সাধারণত ব্যবহারকারীর হোম ডিরেক্টরি বোঝায়

এই রূপান্তরটি শেল এবং টিলডে সম্প্রসারণের মাধ্যমে সম্পন্ন হয় , যা কেবলমাত্র যদি পথে প্রথম চরিত্র হয় তবে কাজ করে। আপনার এটি মোকাবেলা করা দরকার কিনা তা নির্ভর করে প্রসঙ্গে। গ্রন্থাগারটি যদি সাধারণ প্রোগ্রামগুলির সাথে ব্যবহার করতে হয় যা প্রাপ্ত হয়, উদাহরণস্বরূপ, কোনও পাথ রয়েছে এমন কমান্ড লাইন আর্গুমেন্ট, টিলডে সম্প্রসারণ ইতিমধ্যে সম্পন্ন হয়েছে যখন তারা পথটি দেখবে। আপনি যদি কোনও পাঠ্য ফাইল থেকে সরাসরি পাথ প্রক্রিয়াজাত করেন তবে কেবলমাত্র এটিই উদ্বেগজনক হিসাবে দেখতে পাচ্ছি situation

এর বাইরেও, ~* নিক্স পাথের আইনী চরিত্র এবং অন্য কোনও কিছুর বদলে যাওয়া উচিত নয়। যেহেতু এই প্রতি , শুধুমাত্র অক্ষর যা UNIX ফাইলের নাম আইনি না হয় /(পথ বিভাজক তার কারণ হল,) এবং "নাল" (ওরফে। একটি শূন্য বাইট) কারণ তারা সাধারণত টেক্সট অবৈধ।


টিলডে সম্প্রসারণের ব্যাখ্যার জন্য +1; আপনি এটির সাথে অন্য ব্যবহারকারীদের রেফার করতে পারেন আমার কোনও ধারণা ছিল না !
গাণিতিক

2
স্টিফেন যেমন বলেছে, আপনি সমস্ত পুনরাবৃত্ত ফরোয়ার্ড স্ল্যাশ অন্ধভাবে ভেঙে ফেলতে পারবেন না। পথের শুরুতে একাধিক ফরোয়ার্ড স্ল্যাশ সতর্কতার সাথে চিকিত্সা করতে হবে।
ওয়ারেন ইয়ং

এটি পরিষ্কার করার জন্য @ ওয়ারেন ইয়ং সম্পাদিত। পুনশ্চ. ফরোয়ার্ড ??! ও_ও
গোল্ডলোকস

আরও ভাল, যদিও আমি বলব না এটির URL এর সাথে কোনও সম্পর্ক আছে। ইউএনসি ১৯৮০ এর দশকের শেষের দিকে ফিরে যায়, যখন বছরগুলি পরে URL গুলি উপস্থিত হয় না।
ওয়ারেন ইয়ং

@ ওয়ারেন ইয়ং ফেয়ার যথেষ্ট, যদিও মনে হবে ইউএনসির এমএস প্ল্যাটফর্মগুলির জন্য নির্দিষ্ট , তাই //প্রযুক্তিগতভাবে এটিও নয়। ইউএসএল এবং নতুন উভয়ই, এসসি অনুসারে নির্বিঘ্নে অস্পষ্ট POSIX অনুমানগুলি এর থেকে উদ্ভূত // হতে পারে, এই ক্ষেত্রে "ইউআরএল-ইশ" কনভেনশনের জন্য একটি উপযুক্ত লেবেল বলে মনে হয় (এমনকি ইউএনসি-ও বয়স্ক হলেও, এবং সিম্বলেন্স হলেও অনিচ্ছাকৃত)। আমি কখনই বলব না যে "তারা ইউআরএলএস", কেবল এটিই //বা \\ "ইউআরএল-ইশ" উদ্দেশ্যটি সরবরাহ করে।
স্বর্ণলোকগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.