লিনাক্সে, একটি কমান্ড টাইপ করার সময় আপনি যদি TAB দুইবার চাপেন, এটি টাইপ করা অক্ষর দিয়ে শুরু হওয়া সমস্ত উপলব্ধ কমান্ডের তালিকা করবে।
এটি নতুন কিছু নয়, সম্ভবত আপনি ইতিমধ্যে এটি সম্পর্কে জানেন। এই কার্যকারিতাকে ব্যাশ সমাপ্তি বলা হয়। মৌলিক ফাইল এবং ডিরেক্টরির নাম সম্পূর্ণতা ডিফল্টরূপে bash কমান্ড লাইনে উপলব্ধ।
কিন্তু, আমরা এই ব্যাশ সমাপ্তি টার্বো-চার্জ করতে পারি, এবং সম্পূর্ণ কমান্ড ব্যবহার করে পরবর্তী স্তরে নিয়ে যেতে পারি।
এই টিউটোরিয়ালটি ব্যাখ্যা করে কিভাবে আমরা প্রোগ্রামেবল কমপ্লিশন ব্যবহার করে অপশন এবং কমান্ডের আর্গুমেন্টে স্বয়ংক্রিয়-সম্পূর্ণতা প্রয়োগ করতে পারি।
উদাহরণস্বরূপ, write কমান্ড টাইপ করার পরে, আপনি যদি ট্যাব দুইবার চাপেন, স্বয়ংক্রিয়-সম্পূর্ণতা ব্যবহারকারীদের তালিকা প্রদান করে। লেখার অপারেশন করতে।
$ write [TAB][TAB] bala raj jason randy john ritu mayla thomas nisha www-data
নিম্নলিখিত উদাহরণে, এটি টেলনেট কমান্ডের জন্য উপলব্ধ হোস্টনামগুলি দেখাবে:
$ telnet [TAB][TAB] localhost dev-db fileserver
আপনার টার্মিনালে প্রোগ্রামেবল সমাপ্তি পেতে, আপনাকে নীচে দেখানো হিসাবে /etc/bash_completion চালাতে হবে,
# . /etc/bash_completion
আপনি নীচের লাইনগুলিকে /etc/bash.bashrc(ubuntu linux 13.04 থেকে) তেও মন্তব্য করতে পারেন যাতে আপনাকে স্পষ্টভাবে উপরের কমান্ডটি চালাতে না হয়,
<কেন্দ্র> কেন্দ্র>enable bash completion in interactive shells if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi
যদি আপনি এই লাইনগুলি এবং /etc/bash_completion ফাইলটি খুঁজে না পান, তাহলে আপনাকে শুধুমাত্র bash_completion নামক প্যাকেজটি ইনস্টল করতে হবে apt-get
1. বিদ্যমান ব্যাশ-সম্পূর্ণতা দেখুন
প্রোগ্রামেবল ব্যাশ সমাপ্তি সক্ষম করার পরে, ব্যাশ সমাপ্তির সেট সংজ্ঞায়িত করা হয়। সম্পূর্ণ কমান্ড ব্যাশ সমাপ্তি সংজ্ঞায়িত করার জন্য ব্যবহৃত হয়।
বিদ্যমান ব্যাশ সমাপ্তি দেখতে, নীচে দেখানো হিসাবে সম্পূর্ণ কমান্ড ব্যবহার করুন।
complete -p | less
উপরের উদাহরণে Option -p ঐচ্ছিক।
2. ব্যাশে স্ট্যান্ডার্ড সমাপ্তির তালিকা
ব্যাশ ডিফল্টরূপে লিনাক্স ব্যবহারকারীদের জন্য নিম্নলিখিত মানক সমাপ্তি প্রদান করে।
- পরিবর্তনশীল নাম সমাপ্তি
- ব্যবহারকারীর নাম সমাপ্তি
- হোস্টনাম সমাপ্তি
- পাথনাম সমাপ্তি
- ফাইল নাম সমাপ্তি
আমরা আমাদের আগের ব্যাশ স্ট্যান্ডার্ড সমাপ্তি নিবন্ধে এগুলি সম্পর্কে আলোচনা করেছি৷
৷3. কমান্ড প্রাপ্তির জন্য সম্পূর্ণতা সংজ্ঞায়িত করুন
আর্গুমেন্ট হিসাবে উপলব্ধ কমান্ডের তালিকা পেতে -c কমান্ড দিয়ে একটি সমাপ্তির সংজ্ঞা দিন। নিম্নলিখিত উদাহরণে, কোন কমান্ডের জন্য সমাপ্তি সংজ্ঞায়িত করা হয়েছে,
$ complete -c which $ which [TAB][TAB] Display all 2116 possibilities? (y or n)
উপরে দেখা যায়, 'y' চাপলে, সমস্ত কমান্ড তালিকাভুক্ত হবে।
4. ডিরেক্টরি প্রাপ্তির জন্য সম্পূর্ণতা সংজ্ঞায়িত করুন
d বিকল্পের সাথে, সমাপ্তিটিকে যুক্তি হিসাবে শুধুমাত্র ডিরেক্টরির নাম পেতে সংজ্ঞায়িত করা যেতে পারে। নিম্নলিখিত উদাহরণে, ls,
এর জন্য সংজ্ঞায়িত সমাপ্তি$ ls countfiles.sh dir1/ dir2/ dir3/ $ complete -d ls $ ls [TAB][TAB] dir1/ dir2/ dir3/
উপরে দেখা যায়, ট্যাব টিপলে শুধুমাত্র আপনাকে ডিরেক্টরি দেখায়।
5. পটভূমি কাজের নাম প্রাপ্তির জন্য সমাপ্তি সংজ্ঞায়িত করুন
সম্পূর্ণ হলে, কমান্ডের যুক্তি হিসেবে কাজের নাম পাওয়াও সম্ভব। বিকল্প j নিচে দেখানো হিসাবে কাজের কমান্ডের আর্গুমেন্ট হিসাবে কাজের নাম পাস করতে ব্যবহৃত হয়,
$ jobs [1]- Stopped cat [2]+ Stopped sed 'p' $ complete -j ./list_job_attrib.sh $ ./list_job_attrib.sh [TAB][TAB] cat sed
ব্যাকগ্রাউন্ড জব সম্পর্কে কথা বলতে গেলে, এই উদাহরণগুলি ব্যবহার করে লিনাক্স ব্যাকগ্রাউন্ডের কাজগুলি কীভাবে পরিচালনা করবেন তাও আপনার জানা উচিত।
6. উপসর্গ এবং প্রত্যয় সহ সমাপ্তি
পূর্ণতাগুলিকে সংজ্ঞায়িত করা যেতে পারে পছন্দসই উপসর্গ দিয়ে এবং প্রত্যয়টি প্রকৃত সমাপ্তির সাথে যুক্ত করা যেতে পারে। নিম্নলিখিত উদাহরণে, list_job_attrib.sh,
এর জন্য উপসর্গ এবং প্রত্যয় সংজ্ঞায়িত করা হয়েছে$ jobs [1]+ Stopped cat $ complete -P '">' -S '<"' ./list_job_attrib.sh $ ./list_job_attrib.sh [TAB][TAB] $ ./list_job_attrib.sh ">cat<"
7. বর্জন সহ ফাইলের নাম এবং ডিরেক্টরি সমাপ্তি
বিবেচনা করুন যে স্ক্রিপ্ট তার রান সম্পূর্ণ করে, আউটপুট একটি আউটপুট ডিরেক্টরিতে নিম্নরূপ লেখা হয়েছে
$ cd output/ $ ls all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt parser_mod.tmp extract.o
উপরের ক্ষেত্রে, ls কমান্ডের সাথে স্বয়ংক্রিয়ভাবে সমাপ্তির জন্য .tmp এবং .o ফাইলগুলিকে উপেক্ষা করার প্রয়োজন হলে,
$ export FIGNORE='.tmp:.o' $ complete -f -d ls $ cd output $ ls [TAB][TAB] all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
FIGNORE হল শেল ভেরিয়েবল যাতে ফাইলের নামের প্রত্যয় থাকে এবং সেগুলি স্বয়ংক্রিয়-সম্পূর্ণতায় বাদ দেওয়া হয়।
8. সম্পূর্ণতা মান পেতে IFS দ্বারা একটি স্ট্রিং বিভক্ত করুন
শব্দ তালিকাটি -W বিকল্পের সাথে উল্লেখ করা যেতে পারে এবং এটি IFS ভেরিয়েবলের মানের সাথে বিভক্ত হয়ে যায়। তারপর প্রতিটি ফলস্বরূপ শব্দ প্রসারিত হয় এবং সমাপ্তির জন্য প্রদর্শিত হবে,
$ export IFS=" " $ complete -W "bubble quick" ./sort_numbers.sh $ ./sort_numbers.sh [TAB][TAB] bubble quick
উপরে উল্লিখিত হিসাবে, IFS ডিলিমিটার দ্বারা স্ট্রিংকে বিভক্ত করার পরে, শব্দটি প্রসারিত হয়, তাই নীচে দেখানো হিসাবে এইগুলিকে ভেরিয়েবল হিসাবে রাখাও সম্ভব,
$ echo $SORT_TYPE1 bubble $ echo $SORT_TYPE2 quick $ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh $ ./sort_numbers.sh [TAB][TAB] bubble quick
9. সম্পূর্ণতা তৈরি করতে আপনার নিজস্ব ফাংশন লিখুন
এটি আপনাকে সমাপ্তি সংজ্ঞায়িত করার জন্য একটি ফাংশন অন্তর্ভুক্ত করতে দেয়। -F বিকল্পের সাথে, ফাংশনের নামটি সম্পূর্ণ কমান্ডে চলে যায় এবং এটি সম্পূর্ণতা তৈরি করতে কার্যকর হয়। উদাহরণস্বরূপ, ফাংশনগুলি নীচে দেখানো হিসাবে লেখা হয়েছে,
_parser_options() { local curr_arg; curr_arg=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) ); }
যেখানে উপরের ফাংশনে,
- COMPREPLY :অ্যারে সমাপ্তির ফলাফল ধারণ করে যা [TAB][TAB] চাপার পরে প্রদর্শিত হয়
- COMP_WORDS :কমান্ড লাইনে টাইপ করা শব্দের বিন্যাস
- COMP_CWORD :COMP_WORDS অ্যারের জন্য সূচক এবং কমান্ড লাইনে এই ভিন্ন অবস্থানের শব্দগুলি ব্যবহার করে অ্যাক্সেস করা যেতে পারে।
- compgen :-W সম্ভাব্য পূর্ণতা ধারণ করে এবং $current_arg এর উপর ভিত্তি করে সংশ্লিষ্ট আর্গুমেন্ট বেছে নেওয়া হয়
parser_option ফাইলে উপস্থিত এই ফাংশনটি নীচে দেখানো হিসাবে উৎস পায়,
$ source parser_option
এই ফাংশনটিকে আপনার পার্সার স্ক্রিপ্টের সাথে লিঙ্ক করুন যেমন নীচে দেখানো হয়েছে,
$ complete -F _parser_options ./parser.pl $ ./parser.pl [TAB][TAB] -i --incoming -o --outgoing -m --missed
উপরে দেখা গেছে, পার্সারের বিকল্পগুলি ফাংশন _parser_options() দ্বারা তৈরি হয়।
দ্রষ্টব্য:প্রোগ্রামেবল সমাপ্তির জন্য আরও ফাংশন দেখতে /etc/bash_completion দেখুন।
10. সেকেন্ডারি স্পেক যখন প্রাইমারি কোনো জেনারেট করে না
যদি সংজ্ঞায়িত সমাপ্তির স্পেসিফিকেশন দ্বারা কোন মিল তৈরি না হয়, তাহলে -o বিকল্পের সাথে উল্লেখ করা সমাপ্তির জন্য কম-অপশন নেওয়া হচ্ছে।
$ complete -F _count_files -o dirnames ./countfiles.sh
উপরের মত, ./countfiles.sh ফাইলের জন্য _count_files ফাংশন দিয়ে সমাপ্তি সংজ্ঞায়িত করা হয়েছে। যদি _count_files() ফাংশন কোনো মিল জেনারেট না করে তাহলে ডিরেক্টরি সম্পূর্ণ করার চেষ্টা করা হয়।
$ ls countfiles.sh dir1/ dir2/ dir3/ $./countfiles.sh [TAB][TAB] dir1 dir2 dir3