In printf '%s\t%s\n' foo bar
, printf
çıktı alır foo<TAB>bar<LF>
.
f
, o
, b
, a
Ve r
tek genişlikli bir grafik karakterler.
Bu karakterleri aldıktan sonra, terminal karşılık gelen bir glif gösterecek ve ekranın sağ kenarına (orijinal tele-daktilolardaki kağıt) ulaşılmadıkça imleci bir sütun sağa hareket ettirecektir, bu durumda bir satır besleyebilir ve ekranın sol kenarına dönün (sarın) veya sadece terminale ve nasıl yapılandırıldığına bağlı olarak karakteri atın.
<Tab>
ve <LF>
iki kontrol karakteridir. <LF>
(diğer adıyla newline) Unix metnindeki satır sınırlayıcıdır, ancak terminaller için yalnızca bir satır besler (imleci bir konum aşağı hareket ettir). Böylece çekirdekteki terminal sürücüsü onu <CR>
(ekranın sol kenarına dön), <LF>
(imleç aşağı) ( stty onlcr
genellikle varsayılan olarak açık ) olarak çevirir .
<Tab>
terminale imleci bir sonraki sekme durağına (çoğu terminalde varsayılan olarak 8 konum aralıklıdır, ancak boşluğu boşluklarla doldurmadan da ayarlanabilir) yapılandırılmasını söyler.
Bu karakterler, imleç boş bir satırın başlangıcındayken sekme durağı sekme durağı olan bir terminale gönderilirse, bunun sonucu oluşur:
foo bar
ekranda o satırda yazdırılır. Eğer imleç içeren bir satırda üçüncü konumdayken gönderilirlerse xxxxyyyyzzzz
, bunun sonucunda şunlar olur:
xxfooyyybarz
Tablolamayı desteklemeyen terminallerde, terminal sürücüsü bu sekmeleri boşluk dizilerine çevirecek şekilde yapılandırılabilir. ( stty tab3
).
Orijinal tele-daktilolardaki SPC karakteri imleci sağa, backspace ( \b
) ise sola hareket ettirir. Şimdi modern terminallerde, SPC sağa hareket eder ve ayrıca siler (beklediğiniz gibi bir boşluk karakteri yazar). Yani kolye ucu \b
ASCII'den daha yeni bir şey olmalıydı. En modern terminallerinden günü, aslında karakterlerin bir sırası bulunmaktadır: <Esc>
, [
, C
.
n
Karakterleri sola, sağa, yukarı, aşağı veya ekranda herhangi bir konuma taşımak için daha fazla kaçış dizisi vardır . Ekranın satırlarını veya bölgelerini vb. Silmek (boşla doldurmak) için başka kaçış dizileri vardır.
Bu diziler tipik haliyle gibi görsel uygulama tarafından kullanılan vi
, lynx
, mutt
, dialog
metin ekranında rastgele konumlarda yazılı olduğu.
Şimdi, tüm X11 terminal emülatörleri ve GNU gibi birkaç X11 olmayan diğerleri screen
, kopyala yapıştırmak için ekranın alanlarını seçmenizi sağlar. vi
Editörde gördüklerinizin bir bölümünü seçtiğinizde , bu çıktıyı üretmek için kullanılmış olan tüm çıkış dizilerini kopyalamak istemezsiniz. Orada gördüğünüz metni seçmek istiyorsunuz.
Örneğin;
printf 'abC\rAC\bB\t\e[C\b\bD\n'
Girdiğiniz bir editör oturumu simüle Hangi abC
yerine, başına dönebilsem ab
ile AC
, C
ile B
girmek, sonra sola, sonra sağa, sonra bir sonraki sekme durağına, iki sütun Bir sütunu daha hamle D
.
Anlıyorsun:
ABC D
Yani, ABC
4 sütunlu bir boşluk ve D
.
İçinde fare ile o seçerseniz xterm
veya putty
bunlar seçiminde saklayacak ABC
, 4 uzay karakterleri ve D
değil abC<CR>AC<BS>B<Tab><Esc>[C<BS><BS>D
.
Seçimde sonuçlanan printf
, hem terminal sürücüsü hem de terminal emülatörü tarafından gönderilen ancak sonradan işlenen şeydir .
Dönüşümün diğer çeşitleri için bkz <U+0065><U+0301>
( e
bir birleşme vurgu işareti elde edilmiş) değiştirildi <U+00E9>
( é
önceden oluşan formu) ile xterm
.
Ya da echo abc
bu durum ABC
a stty olcuc
. Sonrasında terminale göndermeden önce terminal sürücüsü tarafından çevrilir .
Şimdi <Tab>
, böyle <LF>
aslında bazen (aynı zamanda metin dosyaları bulunan bu birkaç denetim karakterlerinden biri olan <CR>
bazen MSDOS metin dosyaları ve <FF>
sayfa sonu için).
Bu nedenle, bazı terminal emülatörleri, onları korumak için kopyala-yapıştır arabelleklerine mümkün olduğunda kopyalamayı seçer (genellikle <CR>
ne olur ne de <LF>
olsa).
Örneğin, gibi VTE tabanlı terminallerde gnome-terminal
, printf 'a\tb\n'
boş bir satırın çıkışını seçtiğinizde , gnome-terminal
aslında 7 boşluk ve a\tb
yerine X11 seçiminde saklandığını görebilirsiniz .a
b
Ancak çıkışı için printf 'a\t\bb\n'
onu sakladığı a
, 6 alanları ve b
ve için printf 'a\r\tb\n'
, a
7 boşluk ve b
.
Terminallerin gerçek girişi kopyalamaya çalışacağı başka durumlar da vardır; örneğin printf 'a \nb\n'
, görünmez sondaki alanın korunacağı yerde çalıştırdıktan sonra iki satır seçtiğinizde . Ya da iki satır seçerken, iki satır sağ kenar boşluğuna sarılarak bir LF karakteri içermez.
Şimdi, çıktısını printf
CLIPBOARD seçimine X11
kaydetmek istiyorsanız, en iyisi doğrudan şu şekilde yapmaktır:
printf 'foo\tbar\n' | xclip -sel c
Not o yapıştırdığınızda olduğu xterm
diğer birçok terminaller veya xterm
aslında değiştirir \n
ile \r
o karakter çünkü xterm
sen bastığınızda gönderir Enter(ve terminal sürücü geri çevirmek olabilir \n
).