Untuk apa $TERM
?
The $TERM
variabel untuk digunakan oleh aplikasi untuk mengambil keuntungan dari kemampuan terminal itu.
Misalnya, jika suatu program ingin menampilkan teks berwarna, ia harus terlebih dahulu mencari tahu apakah terminal yang Anda gunakan mendukung teks berwarna, dan jika ya, bagaimana melakukan teks berwarna.
Cara kerjanya adalah sistem menyimpan perpustakaan dari terminal yang diketahui dan kemampuannya. Pada kebanyakan sistem ini ada /usr/share/terminfo
(ada juga termcap, tapi warisannya tidak banyak digunakan lagi).
Jadi katakanlah Anda memiliki program yang ingin menampilkan teks merah. Ini pada dasarnya membuat panggilan ke perpustakaan terminfo yang mengatakan " beri saya urutan byte yang saya harus kirim untuk teks merah untuk terminal xterm ". Kemudian hanya mengambil byte dan mencetaknya.
Anda dapat mencobanya sendiri dengan melakukan tput setf 4; echo hi
. Ini akan mendapatkan setf
kemampuan terminfo dan memberikannya parameter 4
, yang merupakan warna yang Anda inginkan.
Mengapa terminal gnome terletak pada dirinya sendiri:
Sekarang katakanlah Anda memiliki emulator terminal mengkilap baru yang baru saja dirilis, dan pustaka terminfo sistem belum memiliki definisi untuk itu. Ketika aplikasi Anda pergi untuk mencari cara melakukan sesuatu, itu akan gagal karena terminal tidak diketahui.
Cara terminal Anda menyiasatinya adalah dengan berbohong tentang siapa itu. Jadi terminal gnome Anda mengatakan " I'm xterm ".
Xterm adalah terminal yang sangat dasar yang telah ada sejak awal X11, dan dengan demikian sebagian besar terminal emulator mendukung apa yang didukungnya. Jadi dengan terminal gnome mengatakan itu adalah xterm, itu lebih mungkin untuk memiliki definisi di perpustakaan terminfo.
Kelemahan dari berbohong tentang jenis terminal Anda adalah bahwa terminal mungkin sebenarnya mendukung lebih banyak daripada xterm (misalnya, banyak terminal baru mendukung 256 warna, sedangkan terminal lama hanya mendukung 16). Jadi Anda memiliki tradeoff, dapatkan lebih banyak fitur, atau lebih banyak kompatibilitas. Sebagian besar terminal akan memilih lebih banyak kompatibilitas, dan karenanya memilih untuk mengiklankan diri mereka sebagai xterm
.
Jika Anda ingin mengesampingkan ini, banyak terminal akan menawarkan beberapa cara untuk mengkonfigurasi perilaku. Tapi Anda juga bisa melakukannya export TERM=gnome-terminal
.
$TERM
kexterm
untuk alasan yang baikThe
TERM
variabel lingkungan menunjukkan terminal tipe , bukan terminal aplikasi .TERM
memiliki tujuan tertentu: ia memberi tahu aplikasi yang berjalan di terminal itu bagaimana berinteraksi dengan terminal.Aplikasi berinteraksi dengan terminal dengan menulis urutan melarikan diri - urutan karakter yang mencakup karakter yang tidak dapat dicetak dan memiliki efek seperti memindahkan kursor, menghapus bagian layar, mengubah warna saat ini, dll. Di masa lalu, berbagai merek terminal fisik memiliki perbedaan set urutan pelarian. Oleh karena itu sistem operasi memelihara basis data jenis terminal dan karakteristiknya. Basis data tradisional adalah termcap ("TERMinal CAPabilities"); banyak sistem dan aplikasi modern telah beralih ke terminfo . Kedua database diindeks dengan nama tipe terminal, dan aplikasi meminta mereka menggunakan nama tipe terminal dari
TERM
variabel lingkungan.Saat ini, sebagian besar terminal menggunakan sekumpulan standar escape sequence dengan beberapa set ekstensi umum, sehingga Anda tidak akan melihat banyak nilai berbeda
TERM
. Kebanyakan emulator terminal GUI kompatibel dengan xterm , terminal X tradisional (yang masih digunakan dan dipelihara).Emulator terminal yang berbeda dari xterm dapat menambahkan entri mereka sendiri ke database terminal dengan nama mereka sendiri. Namun ini tidak cocok dengan cangkang jarak jauh. Suatu program yang berjalan pada mesin A tetapi yang ditampilkan pada mesin B, misalnya karena diluncurkan melalui ssh dari B ke A, perlu menanyakan database terminal pada mesin A. Metode login jarak jauh seperti ssh membawa
TERM
variabel lingkungan, tetapi ini hanya membantu ketika basis data terminal B juga memiliki entri untuk pengguna nilai pada A. Oleh karena itu banyak emulator terminal menempelTERM=xterm
yang cukup banyak dikenal secara universal.Perbedaan antara terminal pada umumnya tidak datang dari cara aplikasi berinteraksi dengan mereka, tetapi dari cara terminal berinteraksi dengan pengguna dan sesuai dengan lingkungannya. Misalnya, Terminal Gnome terlihat bagus di Gnome dan menyediakan tab dan kenyamanan lainnya; Konsole terlihat bagus di KDE dan menyediakan tab dan keramahan lainnya; urxvt memiliki kebutuhan memori yang kecil; Console2 berjalan di Windows; layar dan tmux menyediakan sesi yang dapat dilampirkan ke terminal induk yang berbeda; dan seterusnya. Karena tidak ada fitur ini yang membuat perbedaan pada aplikasi yang berjalan di terminal, kebanyakan emulator terminal menggunakan
TERM=xterm
.Untuk mencari tahu terminal apa yang menjalankan shell, lihat induk dari shell:
sumber
ps -p$PPID
sepertinya tidak memberi tahu saya terminal apa yang saya jalankan. Atau setidaknya tidak dengan cara yang saya mengerti. Apakah Anda memiliki contoh output / respons?Variabel TERM lingkungan tidak berarti terminal yang Anda gunakan.
Mengutip gnu.org :
sumber