Apakah mungkin untuk mengubah atribut font dari output echo di zsh atau bash?
Apa yang saya inginkan adalah sesuatu yang mirip dengan:
echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".
sehingga mencetak: "Ini adalah font: normal, miring , tebal , kecil " dalam satu baris teks.
Jawaban:
Pada sebagian besar, jika tidak semua emulator terminal, Anda tidak dapat menetapkan ukuran font atau font yang berbeda, hanya warna dan beberapa atribut (tebal, bergaris bawah, menonjol).
Di bash (atau di zsh atau shell lain), Anda dapat menggunakan urutan escape terminal secara langsung (selain dari beberapa yang eksotis, semua terminal mengikuti petunjuk xterm hari ini).
CSI
adalahESC [
, ditulis$'\e['
dalam bash. Urutan melarikan diri untuk mengubah atribut adalahCSI Ps m
.Zsh memiliki fungsi yang nyaman untuk itu.
sumber
Anda dapat memasukkan definisi warna ini dalam skrip atau file sumber. Bisa terlihat seperti ini.
Perhatikan bahwa Anda harus mereset kode warna ANSI setelah setiap contoh Anda meminta perubahan. The
tput sgr0
me-reset semua perubahan yang telah dibuat di terminal.Saya percaya mengubah ukuran font atau huruf miring akan spesifik untuk terminal yang Anda gunakan.
Meskipun panduan ini khusus untuk menyesuaikan bash prompt Anda, ini adalah referensi yang baik untuk kode warna dan menghasilkan beberapa ide tentang apa yang dapat Anda lakukan.
sumber
Sepertinya tata letak tidak dapat menangani karakter-
[0x1b]
di depan[
.Baris pertama menjadi tebal:
Untuk tipe umum, saya hanya tahu
dan dari komentar, terima kasih manatwork dan GypsyCosmonaut:
dan tidak tahu perbedaan antara io-std dan normal.
Saya belum melihat miring atau kecil di shell.
Anda dapat memasukkan mereka (terima kasih untuk manatwork juga) dengan Ctrl + v ESC di Bash, di mana ia akan ditampilkan sebagai
^[
. Ini berarti seluruh urutan ANSI akan terlihat seperti^[[1m bold
atau^[[1mbold
(untuk menghindari yang kosong sebelum 'tebal').Banyak editor mengalami masalah dengan (char) 0x1b. Alternatif: salin / tempel dari suatu tempat, atau gunakan
di bash, atau hex editor.
sumber
\e[4m
digarisbawahi,\e[5m
berkedip,\e[7m
terbalik.echo -e "\x1b[3m italic"
Sini:
http://en.wikipedia.org/wiki/ANSI_escape_code
(catatan: banyak dari mereka biasanya tidak berfungsi, tetapi sebagian besar ditandai demikian.)
Saya membuat game di terminal dan sangat bergantung pada tautan di atas. Ia bahkan memberi tahu Anda cara menyembunyikan / menyembunyikan kursor, membuat warna (30-an), "tebal" (lebih terang), lebih gelap, bergaris bawah, miring, warna latar belakang (40-an alih-alih 30-an), dll. Anda juga dapat mengubah lokasi kursor ( yang sangat membantu - misalnya,
"\x1B[1A"
memindahkan kursor ke atas satu baris,"\x1B[0;0H"
memindahkan kursor ke baris 0, col 0,"\x1B[2J"
membersihkan layar,"\x1B[2K"
menghapus garis.Untuk keperluan Anda seperti yang dikatakan orang:
Catatan: Anda perlu yang
-e
diatau Anda perlu menggunakan tanda kutip tunggal. Ketik
man echo
untuk mengetahui alasannya (tanda kutip ganda biasanya menyulitkan saat mencetak; saat saya membutuhkan barang untuk tidak meluas atau saya perlu urutan pelarian ANSI, saya menggunakan tanda kutip tunggal karena mudah - walaupun saya sudah terbiasa melakukannya karena sering melakukannya) - untuk melupakan -e dalam hal ini Anda mendapatkan "box with numbers and letters
[35; 1m").Setiap kali Anda melihat
CSI
menggantinya dengan"\x1b["
(atau"\e["
atau"\u1b["
)."\x1b["
Saya pikir lebih standar, tetapi saya tidak benar-benar tahu apa perbedaan di antara mereka.sumber
\e
kurang didukung daripada yang\x1b
saya temukan. Hal optimal untuk dilakukan adalah salah satuesc=$'\e'
atauesc=$'\x1b'
(ini ada di bash) dan kemudian digunakan"${esc}[34;1m"
(untuk, misalnya, biru cerah). Saya punya contoh semi-kompleks di sini ( github.com/dylnmc/ps1porn/blob/master/powerline.sh ) untuk string bash prompt;) Maafkan nama repo - Anda dapat berterima kasih kepada orang-orang di saluran freenode # archlinux-offtopic untuk itu.esc=$'\e'
adalah hal ini memungkinkan bash untuk membuat karakter ansi-escape di tempat, dan Anda mendapat manfaat darinya dalam beberapa cara. Kadang-kadang, pada kenyataannya, (seperti yang ditunjukkan dalam tautan github), Anda harus menggunakan metode ini untuk mendapatkan warna agar muncul dengan benar. Untuk versi bash yang lebih lama serta shell sh, Anda harus (tetapi tidak perlu) menggunakan metode ini untuk mendapatkan warna untuk muncul ... diberikan bahwa terminal menggunakan urutan melarikan diri yang dilakukan sebagian besar terminal modern.