$ হোম, তবে কখনও কখনও?


14

সিডি

হিসাবে একই জিনিস না

cd $HOME

যা একই হিসাবে হয়

cd /home/tandu

যাহোক,

cd ~not-tandu

পরিবর্তন /home/not-tandu

এটি কি নিখুঁতভাবে সিনট্যাকটিক পছন্দ? এটি কীভাবে কার্নেল (বা cdএক্সিকিউটেবল?) দ্বারা পরিচালিত হয় ~যদি অন্য সমস্ত কিছু বাদ দেওয়া হয় তবে স্ল্যাশ যুক্ত করার জন্য একটি বিশেষ কেস আছে ? অর্থাৎ, ~/এবং ~একই নির্দেশিকাতে পরিবর্তন, কিন্তু ~aএকটি ডিরেক্টরী আপ হয়। আপনি যে কোনও ডিরেক্টরিতে পরিবর্তন করেছেন তার জন্য একই কথা বলা যায় না।


3
নন-তান্দু এবং ~ / নন-তান্দুর তুলনা করতে নির্দ্বিধায়, একটি পয়েন্টটি ব্যবহারকারী-নন-তান্দু হোম ডিরের দিকে এবং অন্যটি আপনার পিসিতে আপনার বাড়ির দির নন-তান্দুকে দেখায়।
জোহান

4
এটি কার্নেল বা "সিডি এক্সিকিউটেবল" নয় (যেহেতু এরকম কোনও কিছুই নেই) - এটি শেলটি বিল্ট ইন।
পল টমলিন

যেহেতু আপনি এটি উল্লেখ করেন নি: cdকোনও পরামিতি ছাড়া কাজ করে না cd ~। আপনি যদি এর সাথে প্রতিস্থাপন cdকরেন echoতবে শেল দিয়ে কী এক্সপ্রেশনটি প্রসারিত হবে তা দেখতে পাবেন।
জোফেল

উত্তর:


18

~$HOMEবেশ কয়েকটি শেল সরবরাহ করার জন্য এটি একটি উপনাম , তবে $HOMEএটি সর্বজনীন। $HOMEআসলে শেলটি এখানে পরিবেশগত ভেরিয়েবল Hোকাতে (বিকল্প) ব্যবহার করতে বলে। বেশ কয়েকটি বিভিন্ন পরিবেশগত পরিবর্তনশীল রয়েছে যা প্রতিস্থাপন করা যেতে পারে, envএকটি তালিকার জন্য দৌড়ে চেষ্টা করুন । নোটটি ~শব্দের শুরুতে না থাকলে সর্বদা স্বীকৃত হয় না। তুলনার জন্য এই দুটি কমান্ড চেষ্টা করুন:

ls /~
ls /$HOME

প্রথমটি এক্সের এক্সিকিউটেবল হিসাবে প্রেরণ করা হয় /~যা এরপরে ~রুট ডিরেক্টরিতে ডাকা একটি ফাইলটি দেখার চেষ্টা করে , দ্বিতীয়টি প্রসারিত হয় $HOMEএবং হয়ে যায় //home/userযা কমান্ড-লাইন আর্গুমেন্ট হিসাবে এক্সিকিউটেবলের কাছে প্রেরণ করা হয়। সমস্ত POSIX সিস্টেম (POSIX UNIX এবং লিনাক্স সিস্টেমগুলি কীভাবে পরিচালিত হয় তার স্ট্যান্ডার্ড) একাধিক স্ল্যাশকে একটি স্ল্যাশের সাথে একইরূপে চলাচলের অনুমতি দেয় তাই //home/userবলা বাহুল্য /home/user~usernameপাসওডিডি ফাইলের ব্যবহারকারীর নাম সন্ধান করার জন্য এবং তাদের হোম ডিরেক্টরিটি ফিরিয়ে দেওয়ার জন্য শেলকে বলা করার শর্টকাট। সমতুল্য কোন পরিবেশের পরিবর্তনশীল নেই। এই সমস্ত প্রতিস্থাপন শেল দ্বারা সম্পন্ন হয় এবং তাদের বেশিরভাগ দ্বারা সমর্থিত হয় তবে কেবল পরিবেশের ভেরিয়েবলগুলি $HOMEসমস্ত শেল দ্বারা সমর্থিত হওয়ার নিশ্চয়তা দেয়। এছাড়াও,cdআসলে একটি বিল্ট-ইন কমান্ড is এটি একটি বিশেষ নির্দেশ যা শেলকে নিজেই ডিরেক্টরি পরিবর্তন করতে বলে tells এটি অন্যান্য শেল বিল্ট-ইনগুলির মতো নয় echoযা পৃথক নির্বাহযোগ্য হিসাবে প্রয়োগ করা যেতে পারে কারণ এটি শেল প্রক্রিয়াটির একটি মৌলিক বৈশিষ্ট্য পরিবর্তন করতে ব্যবহৃত হয়। echoপারফরম্যান্স কারণে নিছক একটি শেল অন্তর্নির্মিত, তবে ইউনিক্সের ভাল পুরানো দিনগুলিতে এটি কেবল নিজের এক্সিকিউটেবল হিসাবে উপলব্ধ ছিল /bin/echo


পুনরায় "যা তারপরে directory মূল ডিরেক্টরিতে" নামক একটি ফাইল দেখার চেষ্টা করে; এটা সব ইউনিক স্বাদের জন্য?
পেসারিয়ার

17

~foo মানে 'ইউজার ফো-র হোম ডিরেক্টরি'।

এটি কার্নেল দ্বারা করা হয়নি, এটি শেল দ্বারা ব্যাখ্যা করা হয়। যখনই শেলটি ~fooএকটি আর্গুমেন্ট হিসাবে দেখায় , স্বচ্ছভাবে এটি ব্যবহারকারীর হোম ডিরেক্টরি দিয়ে প্রতিস্থাপন করে এবং এটি fooতার জায়গায় চলে যায়। সুতরাং আপনি যখন চালান cd ~tandu, শেল আসলে চলমান cd /home/tandu


1
বিশেষত এই প্রতিস্থাপনটি কী এবং কোন অ্যালগরিদমের সাথে রয়েছে? এটা cdনাকি খোল? যদি আপনি শেল চালাচ্ছেন না? এটি কি একটি সাধারণ "যদি something কিছু অনুসরণ করে, আলাদাভাবে প্রসারিত হয়?" বা এই অনন্য অবস্থার জন্য আরও কিছু বিশেষ পরিচালনা করছেন?
বিস্ফোরণ বড়ি

8
টিলডে সম্প্রসারণে বাশ ম্যানুয়ালটি দেখুন । (অন্যান্য অনেক শেল এবং প্রোগ্রাম একই ধরণের নিয়ম অনুসরণ করে))
সিজেএম

4
@ ফান্ডু: শেলটি করে cd, এটি করার জন্য বাহ্যিক নির্বাহযোগ্য নেই (এটি সম্ভব হবে না)
মাদুর

1
@ স্ট্যান্ডু: আপনি যদি শেলটি চালাচ্ছেন না (যেমন এটি ব্যবহার করে দেখতে চেষ্টা করছেন exec(2)), শেল সম্প্রসারণ হয় না। শেল প্রসার ছাড়াই, ~কোনও কিছুর দ্বারা প্রতিস্থাপন করা হবে না - এটি কেবল অন্য একটি পুরোপুরি বৈধ চরিত্র। আমার প্রথম সূর্যের দিনগুলিতে আমাকে এই বিট করুন কারণ /bin/shকুঁচকানো হয়নি ~
অ্যালেক্সিয়স

5

~ এর পরে একটি ব্যবহারকারীর নাম ব্যবহারকারীর হোম ডিরেক্টরিতে প্রসারিত হয়।

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