আমি শেলটিতে ইদানীং প্রচুর সময় ব্যয় করছি এবং আমি ভাবছি যে ট্যাব স্বতঃপূরণ কীভাবে কাজ করে। এর পেছনে কী ব্যবস্থা আছে? বাশ কীভাবে প্রতিটি ডিরেক্টরিের বিষয়বস্তু জানতে পারে?
আমি শেলটিতে ইদানীং প্রচুর সময় ব্যয় করছি এবং আমি ভাবছি যে ট্যাব স্বতঃপূরণ কীভাবে কাজ করে। এর পেছনে কী ব্যবস্থা আছে? বাশ কীভাবে প্রতিটি ডিরেক্টরিের বিষয়বস্তু জানতে পারে?
উত্তর:
স্বতঃসিদ্ধকরণের দুটি অংশ রয়েছে:
রিডলাইন লাইব্রেরি, যেমন ফিজজে দ্বারা ইতিমধ্যে উল্লিখিত হয়েছে, কমান্ড লাইন সম্পাদনা পরিচালনা করে, এবং সম্পন্ন করতে সক্ষম করতে ট্যাব টিপে চাপলে ব্যাশে ফিরে কল করে। ব্যাশ তারপর দেয় সম্ভব সম্পূর্ণকরণ, এবং readline টিপে একটি তালিকা দেখুন (পরের পয়েন্ট দেখুন) যতটা অক্ষর হিসাবে অক্ষর ইতিমধ্যে টাইপ দ্বারা unambiguously সনাক্ত করা হয়। (আপনি বেশ অনেক readline গ্রন্থাগার কনফিগার করতে পারেন দেখতে অধ্যায় কমান্ড লাইন সম্পাদনা ব্যাশ এর বিশদ জন্য ম্যানুয়াল।)
complete
স্বতন্ত্র কমান্ডগুলির জন্য একটি সমাপ্তি প্রক্রিয়াটি সংজ্ঞায়িত করার জন্য বাশ নিজেই অন্তর্নির্মিত । যদি বর্তমান কমান্ডের জন্য কোনও কিছুই সংজ্ঞায়িত না করা হয় তবে এটি ফাইলের নাম দ্বারা সমাপ্তিটি ব্যবহার করে (ইগনাসিও যেমন বলেছিলেন ওপেনডির / রিডডির ব্যবহার করে)।
আপনার নিজের পরিপূরকগুলি সংজ্ঞায়িত করার অংশটি প্রোগ্রামেবল কমপ্লিট বিভাগে বর্ণিত হয়েছে । সংক্ষেপে, আপনার সাথে
complete «options» «command»
কিছু কমান্ডের সমাপ্তির সংজ্ঞা দেওয়া হয়েছে। উদাহরণস্বরূপ complete -u su
বলছেন
জন্য একটি আর্গুমেন্ট শেষ করার su
কমান্ড বর্তমান ব্যবস্থার ব্যবহারকারীদের জন্য অনুসন্ধান ।
এটি যদি সাধারণ বিকল্পগুলি কভার করতে পারে তার চেয়ে জটিল (যেমন আর্গুমেন্ট সূচকের উপর নির্ভর করে বিভিন্ন সম্পূর্ণতা, বা পূর্ববর্তী যুক্তিগুলির উপর নির্ভর করে), আপনি ব্যবহার করতে পারেন -F function
, যা তারপরে সম্ভাব্য পরিসমাপ্তির তালিকা উত্পন্ন করতে শেল ফাংশনটি আহ্বান করবে। (এটি উদাহরণস্বরূপ গিট সমাপ্তির জন্য ব্যবহৃত হয়, যা খুব জটিল, সাবকম্যান্ড এবং কখনও কখনও প্রদত্ত বিকল্পগুলির উপর নির্ভর করে এবং কখনও কখনও শাখার নাম ব্যবহার করে (যা বাশ কিছুই জানেনা))।
complete
কী কী সম্ভব তার উপর প্রভাব ফেলতে আপনি খালি ব্যবহার করে আপনার বর্তমান বাশ পরিবেশে সংজ্ঞায়িত বিদ্যমান পরিপূর্ণতা তালিকাভুক্ত করতে পারেন । আপনার যদি বাশ-সমাপ্তি প্যাকেজ ইনস্টল করা থাকে (বা তবে এটি আপনার সিস্টেমে নাম দেওয়া হয়েছে), প্রচুর কমান্ডের পরিপূর্ণতা ইনস্টল করা হয় এবং উইককেন যেমন বলেছিলেন, /etc/bash_completion
একটি ব্যাশ স্ক্রিপ্ট রয়েছে যা প্রায়শই এটি কনফিগার করার জন্য শেল স্টার্টআপে কার্যকর করা হয়। অতিরিক্ত কাস্টম সমাপ্তির স্ক্রিপ্টগুলি এতে স্থাপন করা যেতে পারে /etc/bash_completion.d
; এগুলি সব থেকে উত্সাহিত হয় /etc/bash_completion
।
আপনি যদি বেসিকগুলিতে আগ্রহী হন: বাশ রিডলাইন ব্যবহার করে যা ইতিহাস এবং বেসিক সমাপ্তি বৈশিষ্ট্যযুক্ত। আপনি যদি বিশদ বোধ করতে চান তবে আপনি উত্সটি পরিদর্শন করতে পারেন। তদুপরি, আপনি সমাপ্তির সাথে নিজের সিএলআই ইন্টারফেসগুলি তৈরি করতে রিডলাইন ব্যবহার করতে পারেন
/etc/bash_completion
(কমপক্ষে, সেখানে বেশিরভাগ জাদুটি দেবিয়ান ভাষায় রয়েছে)।