বাশ ট্যাব সমাপ্তি কীভাবে কাজ করে?


113

আমি শেলটিতে ইদানীং প্রচুর সময় ব্যয় করছি এবং আমি ভাবছি যে ট্যাব স্বতঃপূরণ কীভাবে কাজ করে। এর পেছনে কী ব্যবস্থা আছে? বাশ কীভাবে প্রতিটি ডিরেক্টরিের বিষয়বস্তু জানতে পারে?


2
আপনি যাচাই করতে চাইতে পারেন /etc/bash_completion(কমপক্ষে, সেখানে বেশিরভাগ জাদুটি দেবিয়ান ভাষায় রয়েছে)।
উইক্কেন

1
@ ব্রিকন: এটি বাশ_ কমপ্লেশন, যা ট্যাব সমাপ্তির উপর নির্ভরশীল তবে এটি কীভাবে হয় তা পুরোপুরি নয়।
Ignacio Vazquez-Abram

4
* নিক্স স্ট্যাকেক্সচেঞ্জের উপরও বেশ কয়েকটি প্রশ্ন রয়েছে, যার মধ্যে রয়েছে: unix.stackexchange.com/questions/4738/… unix.stackexchange.com/questions/1800/custom-autocomplete unix.stackexchange.com/questions/12356/… এবং এ এসইউ-তে অন্তত একটি: সুপার
user.com

উত্তর:


100

স্বতঃসিদ্ধকরণের দুটি অংশ রয়েছে:

  • রিডলাইন লাইব্রেরি, যেমন ফিজজে দ্বারা ইতিমধ্যে উল্লিখিত হয়েছে, কমান্ড লাইন সম্পাদনা পরিচালনা করে, এবং সম্পন্ন করতে সক্ষম করতে ট্যাব টিপে চাপলে ব্যাশে ফিরে কল করে। ব্যাশ তারপর দেয় সম্ভব সম্পূর্ণকরণ, এবং readline টিপে একটি তালিকা দেখুন (পরের পয়েন্ট দেখুন) যতটা অক্ষর হিসাবে অক্ষর ইতিমধ্যে টাইপ দ্বারা unambiguously সনাক্ত করা হয়। (আপনি বেশ অনেক readline গ্রন্থাগার কনফিগার করতে পারেন দেখতে অধ্যায় কমান্ড লাইন সম্পাদনা ব্যাশ এর বিশদ জন্য ম্যানুয়াল।)

  • completeস্বতন্ত্র কমান্ডগুলির জন্য একটি সমাপ্তি প্রক্রিয়াটি সংজ্ঞায়িত করার জন্য বাশ নিজেই অন্তর্নির্মিত । যদি বর্তমান কমান্ডের জন্য কোনও কিছুই সংজ্ঞায়িত না করা হয় তবে এটি ফাইলের নাম দ্বারা সমাপ্তিটি ব্যবহার করে (ইগনাসিও যেমন বলেছিলেন ওপেনডির / রিডডির ব্যবহার করে)।

    আপনার নিজের পরিপূরকগুলি সংজ্ঞায়িত করার অংশটি প্রোগ্রামেবল কমপ্লিট বিভাগে বর্ণিত হয়েছে । সংক্ষেপে, আপনার সাথে complete «options» «command»কিছু কমান্ডের সমাপ্তির সংজ্ঞা দেওয়া হয়েছে। উদাহরণস্বরূপ complete -u suবলছেন জন্য একটি আর্গুমেন্ট শেষ করার suকমান্ড বর্তমান ব্যবস্থার ব্যবহারকারীদের জন্য অনুসন্ধান

    এটি যদি সাধারণ বিকল্পগুলি কভার করতে পারে তার চেয়ে জটিল (যেমন আর্গুমেন্ট সূচকের উপর নির্ভর করে বিভিন্ন সম্পূর্ণতা, বা পূর্ববর্তী যুক্তিগুলির উপর নির্ভর করে), আপনি ব্যবহার করতে পারেন -F function, যা তারপরে সম্ভাব্য পরিসমাপ্তির তালিকা উত্পন্ন করতে শেল ফাংশনটি আহ্বান করবে। (এটি উদাহরণস্বরূপ গিট সমাপ্তির জন্য ব্যবহৃত হয়, যা খুব জটিল, সাবকম্যান্ড এবং কখনও কখনও প্রদত্ত বিকল্পগুলির উপর নির্ভর করে এবং কখনও কখনও শাখার নাম ব্যবহার করে (যা বাশ কিছুই জানেনা))।

completeকী কী সম্ভব তার উপর প্রভাব ফেলতে আপনি খালি ব্যবহার করে আপনার বর্তমান বাশ পরিবেশে সংজ্ঞায়িত বিদ্যমান পরিপূর্ণতা তালিকাভুক্ত করতে পারেন । আপনার যদি বাশ-সমাপ্তি প্যাকেজ ইনস্টল করা থাকে (বা তবে এটি আপনার সিস্টেমে নাম দেওয়া হয়েছে), প্রচুর কমান্ডের পরিপূর্ণতা ইনস্টল করা হয় এবং উইককেন যেমন বলেছিলেন, /etc/bash_completionএকটি ব্যাশ স্ক্রিপ্ট রয়েছে যা প্রায়শই এটি কনফিগার করার জন্য শেল স্টার্টআপে কার্যকর করা হয়। অতিরিক্ত কাস্টম সমাপ্তির স্ক্রিপ্টগুলি এতে স্থাপন করা যেতে পারে /etc/bash_completion.d; এগুলি সব থেকে উত্সাহিত হয় /etc/bash_completion


1
ম্যান পেজগুলি কেবল স্বাধীন কমান্ডের জন্য রয়েছে, শেল বিল্টিনগুলির জন্য নয়। তবে এটি আমি যুক্ত লিখিত বাশ ম্যানুয়ালটির অংশ।
পাওলো ইবারম্যান

7

আপনি যদি বেসিকগুলিতে আগ্রহী হন: বাশ রিডলাইন ব্যবহার করে যা ইতিহাস এবং বেসিক সমাপ্তি বৈশিষ্ট্যযুক্ত। আপনি যদি বিশদ বোধ করতে চান তবে আপনি উত্সটি পরিদর্শন করতে পারেন। তদুপরি, আপনি সমাপ্তির সাথে নিজের সিএলআই ইন্টারফেসগুলি তৈরি করতে রিডলাইন ব্যবহার করতে পারেন

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