Bir bash dizisi '\ 033 [999D' ne anlama geliyor ve nerede açıklanıyor?


19

Bir terminaldeki bir çıktı üzerinde bazı manipülasyon yapmak için kullanılan \033[999Dve gibi bash dizilerine rastladım \033[2K\r. Fakat bu diziler ne anlama geliyor? Bu sekansların anlamını bulmama yardımcı olmak için web'de bir liste / özet nerede bulabilirim?


3
Bunlar terminal dizileridir, bash dizileri değildir. İşlevlerini belirlemek için terminal belgelerinize bakmanız gerekir.
Chris Down

1
Bu diziler çıktıyı renklendirmeye yarar. Kontrol: stackoverflow.com/questions/16845699/… ve stackoverflow.com/questions/5947742/…
adizere

1
@adizere tüm kaçış dizileri renk değişiklikleri yapmaz. Bu Q'daki sekanslar renk için değil satır manipülasyonu ve imleç hareketi içindir.
casey

Yanıtlar:


32

Bu bağlantıya bakın http://www.termsys.demon.co.uk/vtansi.htm . Anthon'un dediği gibi, \033 bir kaçış karakteri için C tarzı sekizlik kod. [999DGeri 999 sütun, satırın başlangıcına almanın muhtemelen bir kaba kuvvet yolu imleci hareket ettirir. [2Kgeçerli satırı siler. \rimleci geçerli satırın başlangıcına geri götürecek ve bir terminal kontrol dizisinden ziyade C-tarzı bir kaçış dizisidir.

Güncelleme

Diğer insanların belirttiği gibi, bu kontrol sekansları bashkendi başına bir şey değildir, daha ziyade metnin terminal cihazı / emülatörüdür. Bir zamanlar bu dizilerin tamamen farklı bir donanım tarafından yorumlanması yaygındı. Başlangıçta, her biri tamamen farklı kod kümelerine yanıt verecekti. Bununla başa çıkmak için termcapve terminfobirden fazla terminal ile uyumlu kod yazmak için kullanılan kütüphaneler. tputKomut için bir arayüz terminfokitaplığı ( termcapdesteği de derlenebilecek) ve uyumlu dizileri oluşturmak için daha güçlü bir yöntemdir.

Bununla birlikte, ANSI X3.64 veya ECMA-48 standardı da var. Herhangi bir modern terminal uygulaması bunu kullanacaktır. terminfove termcapuygulama eksik olabilir veya standart olmayan uzantılar içerebileceğinden hala önemlidir, ancak çoğu amaç için ortak ANSI dizilerinin çalışacağını varsaymak güvenlidir.

xterm SSS modern terminal emülatörlerine arasındaki farklar hakkında bazı ilginç bilgiler yer almaktadır (birçok sadece taklit deneyin xtermkendisini) ve nasıl xtermdiziler yukarıda linkte belirtilen VT100 terminalleri ile ilgilidir. Ayrıca , xtermkontrol dizilerinin kesin bir listesini sağlar .

Ayrıca yaygın Linux konsol, bunun için kumanda dizilerinin kesin bir liste bulunabilir elbette kullanılan man console_codesbir karşılaştırma ile birlikte xterm.


Eklediğiniz bağlantı yalnızca aradığım sayfadır.
Alex

@Alex Glad Kendim buldum, gördüğüm çoğu sayfa sadece kapak renkleri ve bir şekilde okumak gerçekten karmaşık. Bu güzel ve basit bir şekilde ortaya koyuyor.
Graeme

kaçış kodlarının eyleminin terminal türüne bağlı olduğuna dikkat edin (ve modern ekranlarda / işletim sisteminde birkaç terminal türünü taklit edebilirsiniz). Bunun tputyerine, daha fazla taşınabilirliğe sahip olmak için komutları kullanabilirsiniz , iirc (ancak terminalinizin özelliklerini daha az kapsama alanı pahasına). VT100 (sayfanın bahsettiği kişi) birçok kişi tarafından destekleniyor (ancak her şey desteklenmiyor, inanıyorum ...). Ancak TERM değişkeniniz başka bir terminale ayarlanmış olabilir ve bu, bazı komutların etkilerini etkileyebilir
Olivier Dulac

@Olivier, tputdaha sağlam bir yol. Ancak, şu anda oldukça yaygın olan belirli VT100 terminali yerine ANSI uyumluluğu, ancak xtermbunları kabul etmeyen bir moda ayarlanabileceğini hayal ediyorum . Sanırım bu konuda biraz daha bilgi ile güncelleyeceğim.
Graeme

@Olivier Çok sayıda terminal öykünücüsü de ayarlanmış TERM=xterm, ancak her şeyi uygulamıyor xterm.
Graeme

5

Çıkış \033karakteridir ve bu dizi bash'a özgü değildir, ancak (bash) programının çalıştığı terminal tarafından (yazılım veya donanım (ağ veya seri hattı üzerinden)) yorumlanır. Böyle birçok dizi var .

Her birinin yaptığı, bağımlı olduğu terminale bağlıdır ve ayrıca terminalin durumunu değiştiren önceki herhangi bir diziye de bağlı olabilir.

Bunlar genellikle bash isteminde renkleri ayarlamak için kullanılır , ancak bu sayfada belirli örneklerinizi bulamadım.


3

'\ 033 [999D' komik. Bazı terminaller kaçış dizisinden daha azını uygular, bu nedenle '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' veya '\ r' nin hiçbiri davranmadığında gerekli olabilir bin sütunlu metin ekranını kim kullanıyor? Bu dizilerin Linux'ta bir man sayfası var: console_codes (4) . bjh21, tüm kodların ayrıntılı bir listesine sahiptir . Hangi programın '\ 033' ayrıştırdığına bağlı olarak, daha net bir ikame '\ e' kullanılabilir.

Bunların doğrudan kullanılması amaçlanmamıştır - terminal kontrol komutlarını vermenin doğru yolu ncurses gibi bir soyutlama katmanıdır - ancak dize değişmezlerinden de işlev görürler.


İyi bir nokta, sadece \033[999Dönceki satır (lar) üzerinde yedek olacağını varsaydım . Tehlikeli kodlamanın bir sonucu olabilir;) Ayrıca bash, kaçış kodlarını doğrudan yorumlayabilirsiniz, örneğin$'\033[999D'
Graeme

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.