Dalam .*rc
file orang yang saya lihat online atau dalam berbagai kode, saya cenderung melihat banyak orang yang secara manual menggunakan urutan pelarian ANSI alih-alih menggunakan tput
.
Saya memiliki pemahaman yang tput
lebih universal / aman, jadi ini membuat saya bertanya-tanya:
Apakah ada alasan obyektif yang harus digunakan seseorang untuk menghindari urutan tput
? (Portabilitas, ketahanan kesalahan, terminal tidak biasa ...?)
terminal
escape-characters
tput
Kapten Man
sumber
sumber
printf
dan urutan pelarian ANSI, tetapitput
gagal (setidaknya pada kotak saya).Jawaban:
tput
dapat menangani ekspresi (misalnya dalamsgr
dansetaf
) yang ditemukan oleh shell-scripter yang kurang berguna. Untuk mendapatkan gagasan tentang apa yang terlibat, lihat output dariinfocmp
dengan opsi-f
(pemformatan) yang diterapkan. Berikut adalah salah satu contoh menggunakan string tersebut dari deskripsi terminfo xterm :Pemformatan membagi segalanya - sebuah skrip atau program untuk melakukan hal yang sama harus mengikuti tikungan dan belokan tersebut. Kebanyakan orang menyerah dan hanya menggunakan string yang paling mudah.
Fitur 16 warna dipinjam dari IBM aixterm, yang memetakan 16 kode masing-masing untuk latar depan dan latar belakang ke dalam dua rentang;
Sebuah skrip sederhana
dan output menunjukkan cara kerjanya:
Angka-angka dibagi karena aixterm menggunakan rentang 30-37 dan 40-47 untuk mencocokkan warna ECMA-48 (juga dikenal sebagai "ANSI"), dan menggunakan kisaran 90-107 untuk kode yang tidak didefinisikan dalam standar.
Berikut ini adalah screenshot dengan xterm yang digunakan
TERM=xterm-16color
, di mana Anda dapat melihat efeknya.Bacaan lebih lanjut:
infocmp
- membandingkan atau mencetak deskripsi terminfotput
,reset
- menginisialisasi terminal atau query terminfo databaseaixterm
Perintahsumber
Berasal dari masa ketika platform UNIX dapat memiliki berbagai perangkat yang menyertainya, saya masih lebih suka tput dan teman-temannya daripada sekuens pelarian literal.
Saya pikir alasan sebenarnya adalah bahwa kebanyakan orang tidak tahu tentang
tput
dan yang terkaitterminfo
/termcap
file dan perpustakaan.sumber
Salah satu alasannya adalah itu
tput
adalah perintah eksternal, jadi mungkin berjalan lebih lambat daripada kode shell escape bawaan. Hal lain adalah bahwa seseorang dapat dengan mudah membuat satu liner yang menggabungkan kode pelarian ANSI dengan karakter lolos spesifik shell, seperti padabash
prompt misalnya:serupa di
zsh
:Di sini semuanya jelas dan kompak. Dengan
tput
satu akan perlu membaginya menjadi beberapa baris atau membuatnya menjadi garis yang lebih panjang dan kompleks, mengeksekusitput
beberapa kali, dll.sumber
PS1="$(tput setaf 2)\u@\h$(tput reset) >
$(tput sgr0)
akhir, tetapi menyetujui bahwa tput adalah perbaikan.