GNU/Linux >> Znalost Linux >  >> Linux

Proč nemohu rolovat v terminálu?

Pro reinicializaci terminálu stačí jednoduchý reset opraví to. Další informace a možnosti naleznete man reset


Zdá se, že odpověď @James Henstridge na tuto otázku AskUbuntu identifikuje chybu správně, protože terminál uvízl v režimu "adresování kurzoru", ať už to znamená cokoli.

Jeho první řešení, příkaz $ tput rmcup , funguje, i když tam není mnoho ve způsobu vysvětlení. Tak jsem se to pokusil zjistit.

man tput říká nám to

tput obslužný program používá terminfo databáze pro zpřístupnění hodnot schopností a informací závislých na terminálu pro shell (viz sh(1)), pro inicializaci nebo resetování terminálu nebo vrácení dlouhého názvu požadovaného typu terminálu.

terminfo také není příliš užitečně zdokumentován. Nejobsáhlejší zdroj, který jsem našel, je článek na tldp.org. Evidentně terminfo je databáze různých terminálů a jejich příkazů a schopností. Pravděpodobně každá instalace Linuxu má jeden? Takže můžete použít různé terminály?

man terminfo označuje, že jeho soubory jsou v /etc/terminfo/*/* , ale na Ubuntu 16.04 jsem tam našel pouze README. Skutečné soubory jsou v /lib/terminfo/*/*; např. /lib/terminfo/l/linux , což je pravděpodobně nejrelevantnější soubor pro většinu čtenářů? Nemohu říci, protože tyto soubory nejsou čitelné pro člověka. Výše odkazovaný článek na tldp.org uvádí, že infocmp lze použít k zobrazení jejich zdroje, ale to není pravda:

$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.

Článek také zmiňuje soubory zdrojového kódu /etc/termcap a /etc/terminfo.src , ale tyto neexistují v Ubuntu 16.04. Našel jsem sadu /usr/share/vte/termcap*/ adresáře, které obsahují lidsky čitelný xterm soubory. Musel bych hádat, že se to všechno připojuje k terminálu GNOME, který používám a který je výchozí pro Ubuntu, ale už mě nebaví zjišťovat jak.

man stránka pro terminfo má však ještě jednu užitečnou poznámku. Pod jeho 'Předdefinovanými schopnostmi' je 'Variable String' exit_ca_mode s 'capname' („název schopnosti“, předpokládám) rmcup s popisem strings to end programs using cup . Popis není příliš užitečný, ale název proměnné ano; to se musí týkat schopnosti terminálu ukončit „režim adresování kurzoru“, ve kterém je terminál zaseknutý.

Takže $ tput rmcup musí používat tput pro přístup k terminfo databázi a aktivujte exit_ca_mode aktuálního terminálu schopnost rmcup , který ukončí režim adresování kurzoru a vrátí terminál do normálního rolovacího chování.


Linux
  1. Zkopírujte soubory v terminálu Linux

  2. Přejmenujte soubor v terminálu Linux

  3. Přesunout soubory v terminálu Linux

  1. Proč (a jak) používání Cat na binárních souborech zkazilo terminál?

  2. Proč má více instancí Mate-terminálu stejné PID?

  3. Proč mohu vidět výstup procesů na pozadí?

  1. Proč je tisk na stdout tak pomalý? Dá se to urychlit?

  2. Kde je hlavičkový soubor <conio.h> v systému Linux? Proč nemohu najít <conio.h>?

  3. Proč je vyžadován segment .bss?