কমান্ড বিল্টিন সিডি এবং সিডির মধ্যে পার্থক্য কী?


17

আমি একটি লিনাক্স কমান্ডের মুখোমুখি হয়েছি builtin cd,।

কমান্ড builtin cdএবং এর মধ্যে পার্থক্য কি cd?

আসলে, আমি পার্থক্য সম্পর্কে কিছু গবেষণা করেছি, তবে আমি এই সম্পর্কে একটি উল্লেখযোগ্য এবং উল্লেখযোগ্য ব্যাখ্যা খুঁজে পাইনি could



আরও দেখুন: stackoverflow.com/q/15691977/974555
Gerrit

উত্তর:


41

cdকমান্ড একটি বিল্ট-ইন, তাই স্বাভাবিকভাবে builtin cdএকই জিনিস কি করতে হবে cd। তবে একটি পার্থক্য আছে যদি cdফাংশন বা উপন্যাস হিসাবে পুনরায় সংজ্ঞায়িত করা হয়, তবে এই ক্ষেত্রে cdফাংশন / ওরফে কল builtin cdকরবে তবে ডিরেক্টরিটি পরিবর্তন করবে (অন্য কথায়, কোনও ফাংশন দ্বারা ক্লাব্বার্ড হলেও বিল্ট-ইন অ্যাক্সেসযোগ্য রাখবে))

উদাহরণ স্বরূপ:

user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd  # undefine function

বা একটি উপনাম সহ:

user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd  # undefine alias

ব্যবহার builtinএছাড়াও একটি ভালো উপায় একটি সংজ্ঞায়িত করতে cdফাংশন যা কিছু আছে এবং ডিরেক্টরির পরিবর্তিত করে (কলিং থেকে cdএকটি অবিরাম পুনরাবৃত্তির মধ্যে আবার তা থেকে মাত্র ফাংশন কলিং রাখা হবে।)

উদাহরণ স্বরূপ:

user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd  # undefine function

5
+1 উদাহরণগুলি এখানে বিশেষভাবে বর্ণনামূলক।
তাশুস

2
উপনামের ক্ষেত্রে, builtin cd mysubdirএবং এর মধ্যে কোনও পার্থক্য রয়েছে \cd mysubdirকি?
অঙ্কুরিত

2
@gerrit শুধু যদি একটি ফাংশন নামে আছে cdযে ক্ষেত্রে, \cdওরফে বাইপাস would এবং ফাংশন চালানো। দেখুন stackoverflow.com/a/16506263/4518341
wjandrea

15

বেশিরভাগ ক্ষেত্রে, কোনও পার্থক্য নেই (তবে নীচে দেখুন)। cdকমান্ড একটি বিল্ট-ইন সব শাঁস কমান্ড। বাহ্যিক কমান্ডটি ইনভোকেটিং শেলের পরিবেশ পরিবর্তন করতে পারে না এবং কার্য ডিরেক্টরিকে পরিবর্তন করা এর পরিবেশের পরিবর্তনের কারণ হিসাবে এটি 1 টি বিল্ট ইন হওয়া দরকার ।

bashকমান্ড builtinবাহিনী শেল ব্যবহার করতে বিল্ট-ইন কমান্ড সংস্করণ, যদিও সেখানে শেল ফাংশন, ওরফে অথবা এক্সটারনাল কমান্ড একই নামের পাওয়া যেতে পারে।

কেস যেখানে ইন করা হয় নামের সঙ্গে একটি শেল ফাংশন যেমন cd, তারপর builtin cdহবে না যে কল। ব্যবহারকারীর দ্বারা শেল ফাংশন বা উরফের মাধ্যমে যুক্ত হওয়া যে কোনও অতিরিক্ত লোড কার্যকারিতা বাইপাসগুলি ব্যবহার করা builtin cd

উদাহরণ:

cdবিল্ট-ইন কমান্ড একটি ফাংশন যেগুলি বিজ্ঞপ্তি আপডেট দ্বারা ওভারলোড হয়ে থাকতে পারে:

cd() {
    builtin cd "$@" && PS1=$(__update_prompt)
}

যেখানে __update_promptঅন্য কোনও ব্যবহারকারীর সরবরাহ করা ফাংশন রয়েছে যা স্ট্রিংয়ের ফলাফল দেয়।

builtin cdফাংশন ফাংশন যাও recursively কল না। builtin cdএই ফাংশনটি সক্রিয় রয়েছে এমন শেল ব্যবহার করে অতিরিক্তভাবে ফাংশনটি কল করা হবে না।


1 বাহ্যিক cdকমান্ড (ম্যাকোস, এবং আমি বিশ্বাস করি, সোলারিস) সহ ইউনিসিস রয়েছে । সেই কমান্ডের উদ্দেশ্য, যা শেলের জন্য কার্যনির্বাহী ডিরেক্টরি পরিবর্তন করতে পারে না , সম্ভবত পসইএক্স মানকে সন্তুষ্ট করা, যা cdপাওয়া উচিত এমন একটি বাহ্যিক ইউটিলিটি হিসাবে তালিকাভুক্ত করে ( cd"বিশেষ বিল্টিন ইউটিলিটিগুলির মধ্যে একটি নয়)" । কোনও কাজের ডিরেক্টরি ডিরেক্টরিকে দেওয়া ডিরেক্টরিতে পরিবর্তন করা সম্ভব কিনা তা পরীক্ষা করার জন্য এটিও পরীক্ষা হিসাবে কাজ করতে পারে


এফডাব্লুআইডাব্লু, ম্যাকওএস বাহ্যিক cdকমান্ডের সাহায্যে ওএস বিভাগে চলে আসবে।
ইয়োন

@ অযান সত্যিই তা করে।
কুসালানন্দ

আপনাকে ধন্যবাদ - আপনি আমার দিনটি শীর্ষ খাঁটি দিয়ে তৈরি করেছেন, ভাল গবেষণা করেছেন, "পাদদেশ নোটগুলি not
জেমস

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