Jawaban:
Tali itu sebenarnya \033[
dan bukan itu masalahnya.
Setelah itu braket pembuka datang serangkaian angka dan simbol. String ini dikenal sebagai urutan pelarian dan digunakan untuk mengontrol kursor dan warna teks konsol, antara lain.
urutan pelarian non-cetak harus disertakan
\[\033[ and \]
Jika urutan escape mengendalikan warna teks, maka itu akan diikuti oleh m
.
Berikut adalah tabel untuk urutan warna:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Jadi, jika Anda ingin prompt konsol Anda berwarna biru, Anda akan menggunakan urutan escape berikut (dalam nama file yang saya lupa):
\[\033[34m\]
(Perhatikan m
)
Namun, urutan pelarian ini tidak hanya mengontrol warna. Itu juga dapat mengontrol pergerakan kursor. Berikut adalah tabel / daftar dengan kode gerakan dan cara kerjanya:
Posisikan kursor:
\033[<L>;<C>H
Atau
\033[<L>;<C>f
menempatkan kursor pada baris L dan kolom C.
Pindahkan kursor ke atas garis N:
\033[<N>A
Pindahkan kursor ke bawah garis N:
\033[<N>B
Pindahkan kursor ke depan kolom N:
\033[<N>C
Pindahkan kursor ke belakang kolom N:
\033[<N>D
Bersihkan layar, pindah ke (0,0):
\033[2J
Hapus ke akhir baris:
\033[K
Simpan posisi kursor:
\033[s
Kembalikan posisi kursor:
\033[u
Perlu diketahui bahwa dua yang terakhir mungkin tidak berfungsi di emulator terminal yang Anda gunakan. Ternyata, hanya xterm
dan nxterm
menggunakan dua urutan.
Dan contoh menggunakan salah satu dari urutan pelarian ini: katakan saya ingin memposisikan kursor saya di baris 3, kolom (karakter) 9. Untuk itu, saya akan menggunakan
\[033\[3;9H]
(Saya mengasumsikan bahwa kolom 0 adalah posisi pertama, sehingga akan menjadi karakter ke-8).
Sumber: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (baca juga 6.2)
Bacaan yang lebih umum: http://ascii-table.com/ansi-escape-afterences.php
[2K
menghapus seluruh baris sebelum dan sesudah kursor. Sumber yang jauh lebih baik adalah artikel Wikipedia, atau Anda dapat langsung menuju ECMA-48 , bagian 8.3.117 SGR - Pilih Graphic Rendition .
0;
dalam urutan warna tidak perlu. Itu hanya membuat warna latar belakang default sebelum mengatur latar depan. Anda juga dapat mengatur latar belakang dengan 4x
.
Mereka mengendalikan perintah untuk terminal.
Terminal pada awalnya adalah perangkat yang agak bodoh yang terhubung ke port serial, dan bukan perangkat lunak GUI multi-tab yang mewah dengan menu yang kita miliki sekarang. Karena mereka hanya menerima aliran karakter (byte), tidak ada pemisahan yang jelas antara data (apa yang akan dicetak di layar) dan perintah (cara mencetaknya). Sebaliknya perintah diwakili dengan karakter kontrol khusus.
Karakter kontrol yang jelas adalah hal-hal seperti umpan baris (baris baru), backspace dan bel bip, tetapi perintah yang lebih spesifik diberikan sebagai urutan karakter, dimulai dengan ESC
karakter (kode 27 dalam desimal, 0x1b dalam hex, atau 033 oktal). Ini sering direpresentasikan sebagai ^[
, atau \033
seperti dalam contoh Anda.
Urutannya ESC [
disebut CSI, atau Pengontrol urutan pengantar, dan ia memulai perintah dengan parameter numerik opsional, yang berakhir dengan huruf yang mendefinisikan perintah utama. Sebagian besar urutan pelarian umum termasuk dalam kelas ini.
Daftar kode pelarian dapat ditemukan misalnya di console_codes(4)
halaman manual, dan pada halaman Wikipedia untuk kode pelarian ANSI .
Beberapa contoh:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Anda dapat menguji perintah dengan misalnya Bash. Menggunakan -e
flag, echo
perintah builtin menerima \033
sebagai representasi ESC
karakter.
Misalnya ini akan mencetak warna ucapan di tengah layar dan yang lainnya biasanya di posisi kursor asli:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
Urutan ESC ]
yang Anda sebutkan adalah OSC atau Perintah Sistem Operasi, yang sebagian besar digunakan dalam perintah untuk mengatur judul jendela xterm
dan lain-lain, misalnya:
echo -e '\033]0;new window title\a'
Lalu ada juga ESC ( A
(dan surat-surat lain) yang mengatur set karakter nasional pada beberapa terminal, ke efek berpotensi lucu .
Escape diikuti oleh braket kotak kanan escape]
digunakan untuk memperkenalkan perintah sistem operasi ( OSC
).
Itu ada di ECMA-48 , dan Anda bisa membaca ringkasan dari urutan kontrol yang digunakan oleh xterm di XTerm Control Sequences , misalnya, untuk mengubah judul jendela terminal.
Urutan melarikan diri dapat dimulai dengan karakter yang berbeda. The C1 (8-Bit) Karakter Kontrol bagian dalam xterm Kontrol Urutan menyebutkan beberapa dari mereka: CSI
(yang Anda lihat sebagai escape[
, APC
, DCS
, PM
. Alasan untuk karakter yang berbeda (kedua) adalah karena pasangan (melarikan diri dan ]
) dikaitkan dengan karakter kontrol byte tunggal yang digunakan untuk berbagai jenis urutan pelarian.
Jika Anda membaca spesifikasi, Anda akan melihat bahwa CSI
ini digunakan untuk kontrol dengan parameter numerik, sementara OSC
memungkinkan string. Selain sintaksis, komite yang menciptakan standar ini ada dalam pikiran menggunakan untuk APC
dan PM
yang berbeda dari DCS
dan OSC
.
Ini disebut kode pelarian ANSI , dan mereka terdaftar di halaman manual untuk console_codes . Mereka tidak spesifik-Bash, melainkan bekerja di aplikasi konsol apa pun selama terminal mendukungnya (kebanyakan emulator terminal melakukannya).
"Urutan melarikan diri" yang dijelaskan dalam jawaban lain bergantung pada JENIS terminal mana yang Anda miliki (paling sering "ANSI" atau turunan / yang serupa).
$ echo $TERM
xterm
Jika Anda ingin menulis skrip yang (agak) INDEPENDEN dari termninal, tetapi masih menggunakan misalnya warna dan fitur-fitur khusus lainnya, maka lihatlah isi man terminfo
.
misalnya
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
akan mencetak .test.
dengan test
latar belakang kekuningan dan warna latar depan merah, dan ini akan bekerja untuk terminal APAPUN yang sebenarnya mampu menggunakan warna dengan cara yang sama.
Untuk melihat apa yang sebenarnya dicetak, masukkan ke dalam od -t x1z
seperti
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... di mana nilainya ditampilkan dalam heksadesimal (karena "x").