Portál AbcLinuxu, 14. května 2025 02:52
Řešení dotazu:
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.
/usr/bin/clear_console
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.
clear && printf '\E[3J'jinak tam pokazdne neco zbyde.
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.
$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.
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?
clear && printf '\E[3J'u me funguje jak v normalni konzoli, tak v Xkach, ze vse smaze a posune kurzoz doleva nahoru.
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.
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í.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.