Portál AbcLinuxu, 13. května 2024 16:19


Dotaz: Jak smazat terminál

14.8.2012 10:36 Joška
Jak smazat terminál
Přečteno: 2272×
Odpovědět | Admin
Ahoj, jak můžu smazat terminál? Hledám příkaz něco jako je clear, ale aby vymazal všechno, ne jen obrazovku ale i text na obrazovce který byl před tím.. Díky

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.8.2012 10:49 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: Jak smazat terminál
Odpovědět | | Sbalit | Link | Blokovat | Admin
Moc tomu nerozumím. Jaký text co byl na obrazovce předtím? Jako že to zůstane v nějakém bufferu emulátoru terminálu (konsole, gnome-terminal, rxvt, ...) a je možné scrollovat zpět?
14.8.2012 10:51 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Jak smazat terminál
hádám že právě tak, aby se tohle nestalo. Příkaz clear to defakto jen odrotuje, takže stále jde scrollovat nahoru a podívat se, co tam bylo.
14.8.2012 13:36 Joška
Rozbalit Rozbalit vše Re: Jak smazat terminál
Nechci právě scrolovat zpět, chci vymazat terminál aby byl jako když jej spustím, uplně prázdný. clear ani reset terminal nesmažou, jen nastaví první řádek nahoru obrazovky..
14.8.2012 13:43 mozog | skóre: 28
Rozbalit Rozbalit vše Re: Jak smazat terminál
A zkousels ten tput reset? V xtermu na Debianu funguje IMO dle zadani.
14.8.2012 11:07 mozog | skóre: 28
Rozbalit Rozbalit vše Re: Jak smazat terminál
Odpovědět | | Sbalit | Link | Blokovat | Admin
tput reset

Z man tput
       reset  Instead  of  putting  out initialization strings, the terminal's
              reset strings will be output if present (rs1, rs2, rs3, rf).  If
              the  reset  strings  are not present, but initialization strings
              are, the initialization  strings  will  be  output.   Otherwise,
              reset acts identically to init.
14.8.2012 20:22 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál
Reset má nevýhodu, že resetuje. Přijdete o font, unicodový režim, klávesovou mapu, stav přepínačů (caps lock) a další věci.
15.8.2012 09:33 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Jak smazat terminál
Co jsem to zkoušel, tak min. se to vrátí do stavu, kdy se otevře nový terminál... takže pokud ty změny režimů, map. apod. nenastaly během této terminal session, tak se IMHO nic nemění.
14.8.2012 12:42 miro
Rozbalit Rozbalit vše Re: Jak smazat terminál
Odpovědět | | Sbalit | Link | Blokovat | Admin
V Ubuntu na to je /usr/bin/clear_console
14.8.2012 20:18 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál
Odpovědět | | Sbalit | Link | Blokovat | Admin

Záleží jaký terminál.

Linuxový virtuální terminál to umí až od verze 3.0 pomocí posloupnosti ESC [ 3 J (vizte console_codes(4)). Vyzkoušet si to můžete třeba příkazem printf '\E[3J'.

Už jsem zaznamenal požadavky na zapracování do příkazu clear (balík ncurses). Někdo údajně podporu přidával do termcapu a do screenu. Já mám patche pro mingetty a vlock (oba bohužel mají mrtvý upstream). Takže kdyby clear vypadal rozumně, tak se mohu pokusit.

15.8.2012 11:58 Milan Roubal | skóre: 25
Rozbalit Rozbalit vše Re: Jak smazat terminál
tak z uvedenych prikazu mi kompletne nesmazal terminal ani jeden z nich, u me je potreba prikaz
clear && printf '\E[3J'
jinak tam pokazdne neco zbyde.
15.8.2012 14:50 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál

clear posílá \E[H\E[J. Což znamená přesunout kurzor doleva nahoru a smazat všechno od kurzoru dolů. \E[3J by mělo smazat vše. Pokud tam něco „zbylo“, tak jedině, že po smazání tam shell něco nakreslil. (Například prompt na pozici kurzoru. \E[3J kurzor nikam nepřesunuje. To byste si ho musel před smazaním přesunout jako to dělá clear: E[H\E[3J.

Můžu se zeptat, na jaké konzoly vám samotné \E[3J nestačí? VGA nebo frame buffer? Jestli frame buffer, tak jaký (VESA, nebo specifický ovladač)? A taky by mě zajímalo, co vám tam zůstává. A samozřejmě verze jádra. Mně to na 3.5.1 funguje na nouveau frame bufferu funguje.

15.8.2012 15:07 Milan Roubal | skóre: 25
Rozbalit Rozbalit vše Re: Jak smazat terminál
zustane tam prave ten prikaz, takze pak to vypada takto:
$printf '\E[3J'
$
vsechno ostatni zmizelo z bufferu, ale ten prikaz printf tam zustane.

Testovano na BackTrack 5.0 R3, ovladace binarni nvidia, jadro 3.2.6.
15.8.2012 21:02 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál

Aby nedošlo k mílce: Opravdu to pouštíte na linuxové virtuální konzoli (taková ta černobílá obrazovka, co se ukáže, když zabijete X server pomocí Ctrl+Alt+Backspace)? Takhle to vypadá, jako by to vůbec nic nedělalo. Všechno ostatní (ve scroll-back bufferu, nad tímto řádkem a pod tímto řádkem) zmizí?

Pokud vím, tak proprietární ovladače s frame bufferem se nesnesou. Takže používáte VGA konzoli?

Jediné, co mne takto napadá, že by to byl výpis z shellu, po skončení příkazu. Nemáte třeba nastavený shell, aby do promptu vypisoval poslední příkaz? Co tam máte za shell, a co v proměnných PS1 a PS2?

16.8.2012 12:26 Milan Roubal | skóre: 25
Rozbalit Rozbalit vše Re: Jak smazat terminál
Tak ja jsem to zkousel v Xkach v emulatoru konzole zvanem Konsole. Tam se tedy prikaz chova tak, ze smaze co je v bufferu (tedy postrani scrollovaci lista zmizi, ale zustane vse co je na obrazovce).

Ted jsem se prepnul do konzole (mimo Xka), tak tam se to chova tak, ze to smaze vse z bufferu a take vse z obrazovky, ale neposune to prompt nahoru doleva, pouze ho posune na dalsi radek.

Kombinovany prikaz
clear && printf '\E[3J'
u me funguje jak v normalni konzoli, tak v Xkach, ze vse smaze a posune kurzoz doleva nahoru.

16.8.2012 17:30 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál
To jsem si oddechl, že jsem to udělal v Linuxu špatně. \E[3J (zatím) zná jen Linux, takže je přirozené, že jinde (třeba v programu Konsole) nefunguje.
Řešení 1× (Václav HFechs Švirga)
16.8.2012 12:33 Milan Roubal | skóre: 25
Rozbalit Rozbalit vše Re: Jak smazat terminál
Takze jestli jsem to dobre pochopil, tak skutecnym resenim by mel byt prikaz
printf '\E[3J\E[H\E[J'
a tento prikaz se tedy uz chova tak jak bych ocekaval, tedy vse smaze a prompt umistni do leveho horniho rohu.
16.8.2012 12:46 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Jak smazat terminál
To mi v KDE konzoli funguje taky, pěkné :-).
Baník pyčo!
16.8.2012 17:40 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak smazat terminál

Pokud jde o Linux, tak stačí \E[H\E[3J. Samozřejmě to můžete obohatit o různé další instrukce pro případ staršího jádra.

Jinde to záleží na implementaci terminálu. Strávil jsem jistou dobu čtením specifikací řídicích znaků různých terminálů a shodl jsem se s ostatními, že žádná jiná existující posloupnost (kromě resetu) nezaručuje smazání bufferu, a proto jsem přidal tento kód. Z toho mimo jiné vyplývá, že pokud třeba Konsole maže buffer původní sekvencí, tak je to čistě její proprietární rozšíření.

15.8.2012 21:28 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Jak smazat terminál
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsem tazatel, ale ze zajímavosti jsem vyzkoušel všechna řešení (tput reset a printf '\E[3J') v KDE Konsoli TM (emulátor terminálu pro KDE) s tím, že jsem sledoval jestli se terminál vymaže a nepůjde zarolovat nahoru na předchozí obsah a nic nefungovalo :-).
Baník pyčo!
15.8.2012 21:28 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Jak smazat terminál
Nicméně funguje kliknout pravým na konzoli a vybrat z nabídky vyčistit rolování :-P.
Baník pyčo!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.