Apa yang dimaksud dengan urutan bash '\ 033 [999D' dan di mana dijelaskan?


19

Saya telah menemukan urutan bash seperti \033[999Ddan \033[2K\ryang digunakan untuk melakukan manipulasi pada cetakan di terminal. Tapi apa arti urutan ini? Di mana saya dapat menemukan daftar / ringkasan di web untuk membantu saya mengetahui arti dari rangkaian ini?


3
Ini adalah urutan terminal, bukan urutan bash. Anda perlu melihat dokumentasi terminal Anda untuk menentukan fungsinya.
Chris Down

1
Urutan-urutan itu berfungsi untuk mewarnai output. Periksa: stackoverflow.com/questions/16845699/… dan stackoverflow.com/questions/5947742/…
adizere

1
@adizere tidak semua urutan pelarian melakukan perubahan warna. Urutan dalam Q ini adalah untuk manipulasi garis dan gerakan kursor, bukan warna.
Casey

Jawaban:


32

Lihat tautan ini http://www.termsys.demon.co.uk/vtansi.htm . Seperti kata Anthon, \033 adalah kode oktal gaya C untuk karakter pelarian. The [999Dmemindahkan kursor kembali 999 kolom, mungkin cara kekerasan untuk mendapatkan ke awal baris. [2Kmenghapus garis saat ini. \radalah carriage return yang akan memindahkan kursor kembali ke awal baris saat ini dan merupakan urutan pelepasan gaya-C daripada urutan kontrol terminal.

Memperbarui

Seperti yang ditunjukkan oleh orang lain, urutan kontrol ini tidak ada hubungannya bashdengan perangkat terminal / emulator tempat teks muncul. Dahulu kala, urutan-urutan ini ditafsirkan oleh perangkat keras yang sama sekali berbeda. Awalnya, masing-masing akan menanggapi set kode yang sama sekali berbeda. Untuk menangani hal ini termcapdan terminfopustaka tempat digunakan untuk menulis kode yang kompatibel dengan beberapa terminal. The tputperintah adalah antarmuka ke terminfoperpustakaan ( termcapdukungan juga dapat disusun dalam) dan merupakan cara yang lebih kuat untuk membuat urutan kompatibel.

Yang mengatakan, ada juga standar ANSI X3.64 atau ECMA-48 . Setiap implementasi terminal modern akan menggunakan ini. terminfodan termcapmasih relevan karena implementasinya mungkin tidak lengkap atau termasuk ekstensi non-standar, namun untuk sebagian besar tujuan, aman untuk mengasumsikan bahwa urutan umum ANSI akan berfungsi.

The xterm FAQ menyediakan beberapa informasi menarik tentang perbedaan antara emulator terminal modern (banyak hanya mencoba untuk meniru xtermitu sendiri) dan bagaimana xtermurutan berhubungan dengan VT100 terminal disebutkan di link di atas. Ini juga menyediakan daftar xtermurutan kontrol yang pasti .

Yang juga biasa digunakan tentu saja adalah konsol Linux, daftar urutan kontrol pasti untuk itu dapat ditemukan di man console_codes, bersama dengan perbandingan xterm.


Tautan yang Anda masukkan hanyalah halaman yang saya cari.
Alex

@ Alex Senang Saya menemukannya sendiri, sebagian besar halaman yang saya lihat hanya warna sampul dan entah bagaimana benar-benar rumit untuk dibaca. Ini menjabarkannya bagus dan sederhana.
Graeme

hati-hati bahwa tindakan kode melarikan diri tergantung pada jenis terminal (dan Anda dapat meniru beberapa jenis terminal pada layar modern / OS). Anda dapat menggunakan tputperintah sebagai gantinya, untuk memiliki portabilitas lebih banyak, iirc (tetapi dengan mengorbankan cakupan yang lebih rendah dari spesifikasi terminal Anda). VT100 (yang dibicarakan laman) didukung oleh banyak (tapi tidak semuanya didukung, saya percaya ...). Tetapi variabel TERM Anda dapat diatur ke beberapa terminal lain, dan ini dapat mempengaruhi efek dari beberapa perintah
Olivier Dulac

@ Olivier, benar tputadalah cara yang lebih kuat. Tapi itu adalah kompatibilitas ANSI daripada terminal VT100 spesifik yang sekarang cukup di mana-mana, meskipun saya membayangkan dimungkinkan untuk mengatur xtermke mode yang tidak menerimanya. Saya akan memperbarui dengan beberapa info lebih lanjut tentang ini saya pikir.
Graeme

@ Olivier Banyak emulator terminal juga diatur TERM=xtermtetapi tidak mengimplementasikan semuanya xterm.
Graeme

5

Ini \033adalah karakter pelarian, dan urutan itu tidak spesifik bash tetapi diinterpretasikan oleh terminal (perangkat lunak atau perangkat keras (melalui jaringan atau serial line)) di mana program (bash) berjalan. Ada banyak urutan seperti itu .

Apa yang dilakukan masing-masing, tergantung pada terminal yang bergantung padanya, dan mungkin juga tergantung pada urutan sebelumnya yang mengubah keadaan terminal.

Ini sering digunakan untuk mengatur warna di bash prompt , tetapi saya tidak menemukan contoh khusus Anda pada halaman itu.


3

'\ 033 [999D' itu lucu. Beberapa terminal menerapkan lebih sedikit dari urutan pelarian, jadi ini mungkin diperlukan jika tidak ada dari '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f', atau '\ r' berperilaku seperti mereka seharusnya, tetapi siapa yang menggunakan tampilan teks seribu kolom? Urutan ini memiliki halaman manual di Linux: console_codes (4) . bjh21 memiliki daftar terperinci dari semua kode . Bergantung pada program mana yang mem-parsing '\ 033', substitusi yang lebih jelas '\ e' mungkin tersedia.

Benar-benar tidak dimaksudkan bahwa ini digunakan secara langsung - cara yang benar untuk mengeluarkan perintah kontrol terminal adalah dengan lapisan abstraksi seperti ncurses - tetapi mereka berfungsi sama baiknya dari string literal.


Poin bagus, saya hanya berasumsi bahwa \033[999Dakan kembali ke baris sebelumnya. Mungkin hanya hasil dari pengkodean yang cerdik;) Anda juga bashdapat menginterpretasikan kode pelarian secara langsung, misalnya$'\033[999D'
Graeme

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.