বাশ কেন এনক্রেসের সাথে লিঙ্ক করে?


11

আমি মনে করি আমি এটি আগেও লক্ষ্য করেছি তবে এটি সম্পর্কে খুব বেশি ভাবি নি; এখন আমি কৌতূহলী

> ldd /bin/bash
        linux-vdso.so.1 =>  (0x00007fff2f781000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000)

Libtinfo ncurses এর অংশ। এটি ফেডোরা সিস্টেম, তবে এটি উবুন্টুতেও একই রকম, এবং আমি রাস্পবিয়ান (একটি ডেবিয়ান বৈকল্পিক) -এ লক্ষ্য করি যে এটি লিঙ্কনসার্সের সাথেও লিঙ্ক করে।

এর কারণ কী? আমি ভেবেছিলাম যে বাশ যা কিছু করেছে তা লিবারডলাইন দিয়ে করা যেতে পারে (যা কৌতূহলীভাবে এটির সাথে লিঙ্ক দেয় না)। এটি কি কেবল তার জন্য বিকল্প?


এটা ncurses অংশ? প্যাকেজ বর্ণনা ( ভাগ টার্মিনাল পরিচালনার জন্য লাইব্রেরি terminfo নিম্নস্তরের ) কিছু (বলে না packages.ubuntu.com/trusty/libtinfo5 ), এবং আছে একটি শেল জন্য যুক্তিযুক্ত শোনাচ্ছে। মূল্যবোধের জন্য প্রয়োজন TERM? আহ, কিছু মনে করবেন না - আমি উত্স প্যাকেজটি দেখতে পাচ্ছি ncurses
মুরু

zshএছাড়াও লিবিটিনফো-তেও লিঙ্ক করুন
কিউংলম

উত্তর:


17

আপনি যদি এই bashহিসাবে চালান :

LD_DEBUG=bindings bash

একটি জিএনইউ সিস্টেমে, এবং bash.*tinfoআউটপুটটির জন্য গ্রেপ , আপনি এর মতো কিছু দেখতে পাবেন:

   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `UP'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `PC'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `BC'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetent'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetstr'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetflag'

আপনি nm -D /bin/bashযে bashটিউনফো থেকে এই চিহ্নগুলি ব্যবহার করছেন তার আউটপুট থেকে নিশ্চিত করতে পারেন ।

এই চিহ্নগুলির মধ্যে যে কোনও একটির জন্য ম্যান পৃষ্ঠা আনতে তারা কী জন্য তা স্পষ্ট করে:

$ man tgetent
NAME
   PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
   direct curses interface to the terminfo capability database

মূলত, bashসম্ভবত এটির readline(লাইব্রেডলাইনটি স্ট্যাটিকভাবে সংযুক্ত রয়েছে) সম্পাদক, টার্মিনাল ক্ষমতা সম্পর্কে অনুসন্ধানের জন্য এটি টার্মিনো ডাটাবেসটি জিজ্ঞাসা করতে ব্যবহার করে যাতে এটির লাইন সম্পাদকটি সঠিকভাবে চালাতে পারে (ডান পলায়নের ক্রমগুলি প্রেরণ এবং সঠিকভাবে কী টিপুনগুলি সঠিকভাবে সনাক্ত করতে পারে) টার্মিনাল।

কেন পঠনরেখাকে স্থিতিশীলভাবে সংযুক্ত করা হয়েছে bash, আপনার মনে রাখতে হবে যে একই ব্যক্তির readlineপাশাপাশি বিকশিত bashহয়েছে এবং এর উত্সে অন্তর্ভুক্ত রয়েছে bash

bashসিস্টেমের ইনস্টলডের সাথে সংযোগ স্থাপন করা সম্ভব libreadline, তবে কেবলমাত্র যদি এটির একটি সামঞ্জস্যপূর্ণ সংস্করণ হয় এবং এটি ডিফল্ট নয়। configureসংকলনের সময় আপনাকে স্ক্রিপ্টটি কল করতে হবে --with-installed-readline


2

bashলাইক এবং অন্যান্য কিছু প্রোগ্রামের মাধ্যমে একটি টার্মক্যাপ অ্যাপ্লিকেশন । বেশিরভাগ লিনাক্স-ভিত্তিক সিস্টেমে (স্ল্যাকওয়্যার বাদে) আপনি সম্ভবত এনক্রোসকে টার্মক্যাপের অন্তর্নিহিত বাস্তবায়ন হিসাবে দেখবেনreadlinescreen

এর জন্য ম্যানুয়াল পৃষ্ঠাtgetent (নাম অভিশাপ_মাংসক্যাপ কারণ এটি এসভিআর 4 এ এভাবেই হয়েছিল ...) বলেছেন:

এই রুটিনগুলি এমন প্রোগ্রামগুলির জন্য রূপান্তর সহায়তা হিসাবে অন্তর্ভুক্ত রয়েছে যা টার্মক্যাপ লাইব্রেরি ব্যবহার করে । তাদের পরামিতিগুলি একই এবং রুটিনগুলি টার্মিনো ডাটাবেস ব্যবহার করে অনুকরণ করা হয় । সুতরাং, এগুলি কেবলমাত্র এন্ট্রিগুলির সক্ষমতা অনুসন্ধান করতে ব্যবহার করা যেতে পারে যার জন্য একটি টার্মিনো এন্ট্রি সংকলিত হয়েছে।

এটি হ'ল, যদি কলিং প্রোগ্রামটি ফিরে পাওয়া ডেটার দিকে ঘনিষ্ঠভাবে নজর না দেয় এবং টার্মিনাল বিবরণ পড়ার জন্য এবং স্ক্রিনে ডেটা লেখার জন্য প্রচলিত টার্মক্যাপ ইন্টারফেস ব্যবহার করে, তবে এটি মূল টার্মক্যাপের মতো কাজ করে।

বেশিরভাগ টার্মক্যাপ অ্যাপ্লিকেশনগুলি খুব কাছ থেকে এটি দেখতে পায় না (এক্সটার্ম একটি বিরল ব্যতিক্রম - এফএকিউ দেখুন )। সুতরাং bashncurses সঙ্গে কাজ করে।

যাইহোক, টার্মক্যাপ লাইব্রেরি ncurses এর চেয়ে ছোট। বেশ কিছুক্ষণ আগে যে বিষয়টি বিবেচিত হয়েছিল এবং ১৯৯ 1997 সাল থেকে--with-termlib এনসিউর্সে একটি কনফিগার বিকল্প রয়েছে যা এটি উচ্চ-স্তরের শাপের লাইব্রেরিতে প্রয়োজনীয় ফাংশন থেকে পৃথক করে একটি লাইব্রেরী হিসাবে টার্মক্যাপ- এবং টার্মিনো-নির্দিষ্ট অংশগুলি তৈরি করে। কয়েক বছর কেটে গেছে এবং লিনাক্স ভিত্তিক কিছু বিতরণ তাদের প্যাকেজগুলিতে অন্তর্ভুক্ত করেছে।

যেহেতু bashকোনও অভিশাপ ফাংশন (libncurses, ইত্যাদি) ব্যবহার করে না, তাই কেবলমাত্র এর বিরুদ্ধে লিঙ্ক করা যুক্তিসঙ্গত libtinfo

readlineএর টার্মক্যাপ-নির্দিষ্ট অংশ bash(আসলে আমি যখন প্রথম মুখোমুখি bashহয়েছিলাম, তখন এর টার্মক্যাপ অংশগুলি হার্ডকোড করা হয়েছিল , যদিও সরকারী উত্স টার্মক্যাপ ব্যবহার করেছে - সম্ভবত আরও কয়েকটি বাইট সংরক্ষণ করার জন্য)। যখন bashবান্ডিল দিয়ে তৈরি করা হয় readline, আপনি readlineআলাদা লাইব্রেরি হিসাবে দেখতে পাবেন না কারণ এই বান্ডিল ইনস্টলটি readline(সম্ভবত বিরোধপূর্ণ) ভাগ করে নেওয়া লাইব্রেরি হিসাবে তৈরি করার কোনও মানে হবে না । তবে (আপনার সিস্টেমের উপর নির্ভর করে), আপনি দেখতে পাবেন libtinfoকারণ এনক্রাসগুলি একটি উপায়ে তৈরি করা হয়েছে বা অন্যভাবে (বিভক্ত বা না) - উভয়ই নয়।

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