`সিডি` বাহ্যিক আদেশের বিন্দুটি কী?


71

এই সূক্ষ্ম উত্তরে যেমন উল্লেখ করা হয়েছে , পসিক্স সিস্টেমগুলির cdশেল বিল্টিন ছাড়াও একটি বাহ্যিক বাইনারি রয়েছে। OS X 10.8 এ এটি /usr/bin/cd। আপনি এটিকে বিল্টিনের মতো ব্যবহার করতে পারবেন না cdকারণ এটি নিজস্ব কার্যকরী ডিরেক্টরি পরিবর্তন করার সাথে সাথেই প্রস্থান করে। এটা কি উদ্দেশ্য পরিবেশন করে?


মনে রাখবেন যে উবুন্টু এবং সেন্টোস (এবং সম্ভবত সম্ভবত রেড হ্যাট) নেই /usr/bin/cd, কেবল শেলটি বিল্ট ইন।
কিথ থম্পসন

1
আমার ফেডোরা 19 এর মধ্যে অন্তর্ভুক্ত রয়েছে /bin/cd
SLM

1
ডেবিয়ান (আমি বর্তমানের পরীক্ষাসহ বেশ কয়েকটি রিলিজ পরীক্ষা করেছি) এরও /bin/cdনেই /usr/bin/cd
ডারোবার্ট

1
আমি অনুমান করি যে এই সিস্টেমগুলিকে কঠোরভাবে POSIX নয়। ঠিক সবার মতোই। :)
কোজিরো

উত্তর:


64

এটি পসিক্স সরঞ্জাম-বুকটি শেলের ভিতরে এবং বাইরে উভয়ই উপলব্ধ কিনা তা নিশ্চিত করার জন্য এটি পরিবেশন করে ( সেগুলির প্রয়োজনীয়তার জন্য পসিক্স যুক্তি দেখুন )।

কারণ cdএটি দুর্দান্তভাবে কার্যকর নয় তবে নোট করুন যে cdডিরেক্টরিগুলি পরিবর্তিত হয় তবে এর অন্যান্য পার্শ্ব প্রতিক্রিয়া রয়েছে: এটি একটি প্রস্থান স্থিতি ফিরিয়ে chdir()দেয় যা আপনাকে সেই ডিরেক্টরিতে সক্ষম কিনা তা নির্ধারণ করতে সহায়তা করে এবং আপনি কেন পারবেন না তা ব্যাখ্যা করে একটি দরকারী ত্রুটি বার্তা আউটপুট দেয় ining chdir()যখন আপনি পারবেন না

উদাহরণ:

dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)

আর একটি সম্ভাব্য পার্শ্ব-প্রতিক্রিয়া হ'ল ডিরেক্টরিটির স্বতঃসংস্থান।

কয়েকটি সিস্টেমে, স্ট্যান্ডার্ড শেল বিল্টিনগুলির জন্য বেশিরভাগ বাহ্যিক কমান্ডগুলি একই স্ক্রিপ্টের একটি সিমলিংক হিসাবে প্রয়োগ করা হয়:

#! /bin/sh -
"${0##*/}" "$@"

এটি শেল শুরু করে এতে বিল্টিন চালান।

কিছু অন্যান্য সিস্টেমে (যেমন জিএনইউ) এর যথাযথ এক্সিকিউটেবল কমান্ড হিসাবে ইউটিলিটি রয়েছে যা শেল বিল্টিন সংস্করণ থেকে আচরণের থেকে পৃথক হয়ে গেলে বিভ্রান্তির সৃষ্টি করতে পারে।


2
পার্শ্ব প্রতিক্রিয়া এবং ত্রুটি বার্তাগুলি সম্পর্কে পর্যবেক্ষণের জন্য +1। নতুন ব্যবহারকারীদের কাছে এটি সর্বদা ভালভাবে ব্যাখ্যা করা হয় না যে ইউনিক্সে প্রচুর চালাক বুদ্ধিমান পার্শ্ব প্রতিক্রিয়াগুলির যত্ন সহকারে ব্যবহার থেকে আসে। এবং ম্যান পেজগুলি নিজেরাই বৃহত্তর চিত্রটি বর্ণনা করতে পারে নি good
RBerteig

এসও তে অনুরূপ প্রশ্ন থেকে এখানে এসেছেন, আপনি যখন "ডিরেক্টরিতে স্বতঃসংশোধন" বলবেন তখন কী বোঝাতে চাইছেন তা কি আপনি ব্যাখ্যা করতে পারেন?
flledgling


1
স্টাফেন চেজেলাসের চিন্তাটি আনপ্যাক করার জন্য: আপনার যদি নিশ্চিত হওয়া দরকার যে কোনও স্বয়ংচালিত ডিরেক্টরি আসলে কোনও পরিবর্তন না করে এবং কোনও ফাইল পড়ার চেষ্টা না করে মাউন্ট করা হয়েছে, আপনি বহিরাগত cdআদেশটি ব্যবহার করতে পারেন could একটি স্বয়ংক্রিয় পরিমাণে দূরবর্তী ফাইল সিস্টেমের প্রাপ্যতা নিরীক্ষণে, বা সম্ভবত একটি সময়-সমালোচনামূলক কিছু করার আগে দরকারী হতে পারে।
টেলকোম

11

আসলে একটি অ builtin cd কমান্ড পাওয়া যায় মূলত POSIX কারণে প্রয়োজন সব নিয়মিত builtins Exec পরিবার কমান্ড দ্বারা callable হতে জন্য env, find, nice, nohup, timeএবং xargsসত্য এই কমান্ডের কিছু নিজেদের builtins হিসাবে প্রয়োগ করা হচ্ছে না করার মিলিত।

cdযদিও এটি এই কমান্ডগুলির সাথে এটি একত্রিত করা যথেষ্ট অর্থহীন much এখানে কমবেশি স্থায়ী উদাহরণ দেওয়া আছে:

find . -type d -exec cd {} \;
env HOME=/foo cd

2
বেশ কয়েকটি বিল্ট-ইনরা সেই নিয়ম থেকে অব্যাহতিপ্রাপ্ত । উদ্ভট, সিডি তাদের মধ্যে একটি নয়।
কেভিন

5
@ কেভিন আমি লিখেছি এটি সমস্ত নিয়মিত বিল্টিনগুলির জন্য প্রয়োজনীয়তা , অব্যাহতিপ্রাপ্তরা বিশেষ বিল্টিন : break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unsetবহিরাগত কমান্ড হিসাবে অপ্রাসঙ্গিক হবে যখন cdএকটি নিয়মিত বিল্টিন যেখানে কমান্ড হিসাবে কিছু ডকুমেন্টেড ব্যবহারের মামলা রয়েছে।
jlliagre

1

কোনও পাথ অ্যাক্সেসযোগ্য ডিরেক্টরিটির সাথে সামঞ্জস্য করে কিনা তা যাচাই করা ছাড়াও, cdএক্সিকিউটেবলটি CDPATHপরিবর্তনশীলটি প্রক্রিয়া করে এবং ব্যবহার করবে এবং সমাধানযোগ্য ডিরেক্টরিটি যদি সফলভাবে ব্যবহার করা হয় তবে এটির পরম পথটি মুদ্রণ করবে

$ export CDPATH=/usr
$ echo bin lib | xargs -n 1 cd
/usr/bin
/usr/lib

এটি কেবলমাত্র মাঝেমধ্যে কার্যকর, তবে ডিরেক্টরিগুলির সাথে মেলে অনুসন্ধানের জন্য একই যুক্তিকে পুনরায় প্রয়োগ করতে বাঁচাতে পারে। একটি কংক্রিট ব্যবহারের ক্ষেত্রে সম্ভাব্য পিতামাতার অধীনে একটি নির্দিষ্ট নামের প্রথম বিদ্যমান ডিরেক্টরিটি সন্ধান করা হচ্ছে।

cdপ্রক্রিয়াগুলির OLDPWDজন্যও cd -, তবে এটি পরিবেশগত পরিবর্তনশীল ইতিমধ্যে উপলব্ধ থাকায় এটি কম কম কার্যকর।

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