কেন শেল বিল্টিনগুলি মূলধনী অক্ষর দিয়ে চালানো যায় না তবে অন্যান্য কমান্ড পারে?


33

কেন?

আমি যখন এই কাজ

CD ~/Desktop

এটি আমাকে ডেস্কটপে নিয়ে যায় না। কিন্তু এই:

echo "foo
bar" | GREP bar

আমাকে দেয়:

bar

4
চেক alias GREPবা which GREPআউটপুট কিছু।
চিপনার

1
এই নাও. আপনার নামের একটি আদেশ রয়েছে GREPযা পৃথক grep। (সত্য, এটি কেবল একটি শক্ত লিঙ্ক বা প্রতীকী লিঙ্ক হতে পারে /usr/bin/grepতবে শেলের দিক থেকে এটি একটি পৃথক কমান্ড))
শেপনার

12
অপেক্ষা করুন: আপনি ম্যাক ওএস এক্সে আছেন, তাই না? এইচএফএস + হ'ল ডিফল্টরূপে কেস-সংরক্ষণ করে, যার অর্থ হ'ল আপনি ফাইল তৈরির ক্ষেত্রে যদি বিষয়টি বিবেচিত হয় তবে ফাইলটি একবার উপস্থিত হয়ে গেলে, অনুসন্ধানগুলি কেস-সংবেদনশীল হয়। এটি, bashনামের একটি ফাইল চাইতে পারে GREP, তবে ফাইল সিস্টেমটি grepএকটি ম্যাচ বিবেচনা করে match
চিপনার

1
হ্যাঁ, কারণ এটি ইউনিক্স।
ডিসপ্লেনেম

4
ফাইল সিস্টেম অপারেটিং সিস্টেম থেকে স্বতন্ত্র। আপনি ম্যাক ওএস এক্স সহ অন্যান্য ফাইল সিস্টেমগুলি ব্যবহার করতে পারেন এবং আপনি অন্যান্য তত্ত্বাবধানের সাথে (তত্ত্ব অনুসারে) এইচএফএস + ব্যবহার করতে পারেন। এছাড়াও, আপনি এইচএফএস + কেস-সংবেদনশীল করতে পারেন; কেস-সংরক্ষণের আচরণটি historicalতিহাসিক কারণে কেবল ডিফল্ট।
চিপনার

উত্তর:


71

আপনার অন্যান্য প্রশ্নগুলি থেকে আমি এটি গ্রহণ করি যে আপনি ওএস এক্স ব্যবহার করছেন OS উভয় নাম একই ফাইলে পাবেন। সাইগউইনের অধীনে বা কেস-সংবেদনশীল ফাইল সিস্টেমগুলির সাথে (FAT32 বা ciopfs এর মতো ) কোথাও একই জিনিস ঘটতে পারে ।

কারণ grepএকটি বাস্তব নির্বাহযোগ্য, এটি ফাইল সিস্টেমে সন্ধান করা হয় (ডিরেক্টরিতে PATH)। যখন আপনার শেল সৌন্দর্য /usr/binপারেন জন্য grepবা GREPএটা পাবেন grepএক্সিকিউটেবল।

শেল builtins হয় না ফাইলসিস্টেম-এর দিকে তাকিয়ে: কারণ তারা সালে নির্মিত করছি, তারা শেল নিজে এর ভিতরে (কেস সংবেদনশীল) স্ট্রিং তুলনা সাহায্যে চালু হয়।

আপনি যা মুখোমুখি হচ্ছেন তা একটি আকর্ষণীয় ঘটনা। যদিও cdএটি বিল্টিন, অ্যাক্সেসড কেস-সংবেদনশীলভাবে, CDএক্সিকিউটেবল হিসাবে পাওয়া যায় /usr/bin/cdcdএক্সিকিউটেবল চমত্কার অনর্থক কারণ cdবর্তমান শেল সঞ্চালনের পরিবেশ প্রভাবিত করে, এটা সবসময় একটি শেল হিসাবে প্রদান করা হয় নিয়মিত বিল্ট-ইন , কিন্তু একটা হয় cdএক্সিকিউটেবল POSIX দোহাই জন্য যাহাই হউক না কেন, যা নিজেই জন্য ডিরেক্টরি পরিবর্তন এবং তারপরে সঙ্গে সঙ্গে বন্ধ, পার্শ্ববর্তী শেল যাব যেখানে এটি শুরু হয়েছিল।

আপনি typeবিল্টিন দিয়ে এটি ব্যবহার করে দেখতে পারেন :

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD

typeআপনি যখন আদেশটি চালাবেন তখন শেলটি কী করবে তা আপনাকে জানায়। আপনি চালনা করার সময় আপনি cdবিল্টিন অ্যাক্সেস করেন CDতবে এক্সিকিউটেবলকে খুঁজে পান। অন্যান্য বিল্টিনগুলির জন্য, বিল্টিন এবং এক্সিকিউটেবল যুক্তিসঙ্গতভাবে সামঞ্জস্যপূর্ণ হবে (চেষ্টা করুন echo), তবে cdএটি সম্ভব নয়।


1
ভাল উত্তর. আমি সাইগউইন বলতে যাচ্ছিলাম, যা একই প্রভাব ফেলবে।
জোশুয়া

@ জোশুয়া ওপির সমস্যাটি সমাধান হয়েছে, তবে আমি মনে করি এই প্রশ্নটির আরও পাঠকদের জন্য, একটি সাইগউইন ভিত্তিক উত্তর অন্তত বিদ্যমান হিসাবে যতটা কার্যকর হবে; সংক্ষিপ্ত হলেও, এবং বিশদটির জন্য বিদ্যমানটির চেয়ে পিছিয়ে থাকা, আপনি এটি একটি পৃথক উত্তর করতে পারেন?
ভোলকার সিগেল

1
কেন পোস্টিক্সের সিডির মতো একটি অকেজো কমান্ডের প্রয়োজন হবে, এবং কেন ওএসএক্সের অভ্যন্তরীণ সিডি যোগ্যতা অর্জন করবে না?
জন

2
৫১ টি উর্ধ্বতন! আমার একটি মন্তব্যের পরিবর্তে একটি উত্তর পোস্ট করা উচিত :)
চিপনার

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