Saya pikir saya sudah memperhatikan ini sebelumnya tetapi tidak pernah terlalu memikirkannya; sekarang saya penasaran.
> 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 adalah bagian dari ncurses. Ini adalah sistem fedora, tetapi sama di ubuntu, dan saya perhatikan pada raspbian (varian debian) itu juga terhubung ke libncurses itu sendiri.
Apa alasannya? Saya pikir semua yang dilakukan bash dapat dilakukan dengan libreadline (yang anehnya, itu tidak terhubung ke). Apakah ini hanya pengganti untuk itu?
TERM
? Ah, sudahlah - Saya melihat paket sumbernyancurses
.zsh
juga tautan ke libtinfo, jugaJawaban:
Jika Anda menjalankan
bash
sebagai:pada sistem GNU, dan menerima
bash.*tinfo
dalam output itu, Anda akan melihat sesuatu seperti:Anda dapat mengkonfirmasi dari output
nm -D /bin/bash
yangbash
menggunakan simbol-simbol dari tinfo.Membawa halaman manual untuk simbol-simbol itu menjelaskan untuk apa simbol-simbol itu:
Pada dasarnya,,
bash
lebih mungkinreadline
editornya (libreadline terhubung secara statis), menggunakan editor tersebut untuk meminta basis data terminfo untuk mencari tahu tentang kapabilitas terminal sehingga dapat menjalankan editor lini dengan benar (mengirimkan urutan jalan keluar yang tepat dan mengidentifikasi penekanan tombol dengan benar) pada sembarang terminal.Mengenai mengapa readline terhubung secara statis ke dalam
bash
, Anda harus mengingat bahwareadline
yang dikembangkan bersamabash
oleh orang yang sama dan termasuk dalam sumberbash
.Dimungkinkan untuk membangun
bash
untuk dihubungkan dengan sistem yang diinstallibreadline
, tetapi hanya jika yang itu adalah versi yang kompatibel, dan itu bukan default. Anda harus memanggilconfigure
skrip pada saat kompilasi--with-installed-readline
.sumber
bash
adalah aplikasi termcap viareadline
, like,screen
dan beberapa program lainnya. Pada kebanyakan sistem berbasis Linux (selain Slackware), Anda cenderung melihat ncurses sebagai implementasi mendasar dari termcap .The halaman manual untuk
tgetent
(bernama curs_termcap karena itulah cara itu dilakukan di SVR4 ...) mengatakan:Artinya, jika program panggilan tidak melihat dengan seksama pada data yang dikembalikan, dan menggunakan antarmuka termcap konvensional untuk membaca deskripsi terminal dan menulis data ke layar, itu berfungsi seperti termcap asli.
Sebagian besar aplikasi termcap tidak terlalu memperhatikan (xterm adalah pengecualian yang jarang - lihat FAQ ). Begitu juga
bash
dengan ncurses.Namun, pustaka termcap lebih kecil dari ncurses. Beberapa waktu yang lalu itu penting, dan sejak 1997 ncurses telah memiliki opsi konfigurasi
--with-termlib
yang membuatnya membangun bagian-bagian spesifik termcap dan terminfo sebagai perpustakaan yang terpisah dari fungsi-fungsi yang diperlukan di perpustakaan kutukan tingkat tinggi. Beberapa tahun berlalu, dan beberapa distribusi berbasis Linux memasukkannya ke dalam paket mereka.Karena
bash
tidak menggunakan salah satu fungsi kutukan (libncurses, dll.), Masuk akal untuk menautkan hanya terhadaplibtinfo
.readline
adalah bagian spesifik-termcap daribash
(sebenarnya ketika saya pertama kali bertemubash
, bagian-bagian termcap-nya adalah hardcode , meskipun sumber resmi menggunakan termcap - mungkin untuk menyimpan beberapa byte lagi). Ketikabash
dibangun dengan bundelreadline
, Anda tidak akan melihatreadline
sebagai pustaka yang terpisah karena tidak ada gunanya menjadikanreadline
instalasi yang dibundel sebagai pustaka bersama (yang mungkin bertentangan). Tetapi (tergantung pada sistem Anda), Anda mungkin melihatlibtinfo
karena ncurses dibangun dengan satu atau lain cara (terpisah atau tidak) - tidak keduanya.sumber