it-swarm-eu.dev

Jak zakázat zalamování řádků v terminálu?

Potřebuji prohlížet velké soubory protokolů pomocí bash Shell. K otevírání souborů jsem použil less, ale protože řádky jsou příliš zdlouhavé, děje se nějaké obtékání řádků/slov.

Protože soubory jsou protokoly Log4J a na začátku každého řádku je vzor, ​​zabalení řádků ztěžuje analýzu výstupu, takže jsem začal používat less -S který nasekává dlouhé čáry.

Ale teď musím použít tail -f, a také řádek zabalí výstup. Je možné zakázat zalamování řádků v bashovém prostředí pro všechny příkazy?

Poznámka: existuje odpověď na jinou otázku, která zmiňuje únikovou sekvenci echo -ne '\e[?7l', ale zdá se, že na bash nefunguje.

59
nunaxe

Opravdu potřebujete tail -f nebo by něco jako less +F dělat? Protože to zní, jako byste stále chtěli interaktivní pager, zdá se mi, že by bylo mnohem snazší držet se less, než si ho sami doplnit.

Poslední poznámka: zvážili jste tail -f file | less?

9
jw013

Snaž se:

less -S +F filename

  • Lis Ctrlc zastavit chvilku a nyní se můžete pohybovat doleva a doprava pomocí kurzorových kláves.
  • Lis Shiftf pokračovat v ocasu
  • Lis Ctrlcq ukončit
55
Boris Marcos

Nalezeno dobrá odpověď od superuživatele , která funguje mimo pole pro gnome-terminal a pravděpodobně i pro další terminály:

setterm -linewrap off

enter image description here

20
Yuri Ghensev

Předpokládejme, že máte definovanou proměnnou COLUMNS, můžete ji spustit

tail -f your-app.log | cut -c -$COLUMNS

jinak nahradit $COLUMNS se šířkou sloupců terminálu, získanou stty -a.

17
enzotib

Můžete zakázat obtékání řádků pro less, tail a každý další příkaz pod Linux Sun pomocí:

tput rmam

Chcete-li obnovit zalomení řádku, použijte:

tput smam
6
WinEunuuchs2Unix

Zde jsou dvě dobré odpovědi/příklady

http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated

tail -f logfile.log | cut -b 1-80

tail -f logfile.log | cut -b -$(tput cols)

Jedna námitka: alespoň na vestavěném terminálu na mém Macu se nezdá, že by zvládl znaky tabulátoru velmi dobře. Zdá se, že je zobrazuje např. S ​​8 mezerami, ale vypočítá je pouze jako 4 mezery nebo něco podobného. Jinými slovy, pokud má váš terminál šířku 80 znaků a výstup obsahuje několik karet na řádek, musíte nastavit šířku na asi 60 nebo něco podobného. YMMV.

4
d-b

Emulátor terminátoru (http://software.jessies.org/terminator/) emulátor terminálu neumožňuje zalamovat dlouhé řádky a má vodorovné rolování (ale je psáno v Javě).

3
gentledevil

Na této stránce je několik příkladů potrubí ocasu s -f ... z mých testů to nefunguje správně, pokud opravdu potřebujete potrubí (např. Pokud potřebujete potrubí více, jako grep), můžete použít něco jako :

watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS'

není to nejlepší pro výkon pravděpodobně, ale funguje ... jinak, pokud není třeba žádné další pipping, můžete použít něco jiného, ​​jako:

less -S +F file.log
2
nars

Použijte níže uvedené možnosti s less. Zakáže zalamování slov a zachová barvy textu, pokud je zadáno.

less -SR +F filename

2
Kamal Nayan

Existuje mnoho komentářů, které zabloudily z otázky. OP otázka byla

Ale teď musím použít tail -f, A také to řádek zabalí výstup. Je možné zakázat zalamování řádků v bashovém prostředí pro všechny příkazy?

Byly vzneseny některé připomínky k funkci automatického přebalení a uvedly, že ne všechny terminály ji mají. Možná. Ale (kromě terminátor , jehož vývojáři dokumentují ne popis terminál ), všechny uvedené příklady byly xterm, rxvt a některé vypadající nebo podobné. To vše souvisí.

Možnost +aw V xterm odpovídá prostředku autoWrap. V příručce se uvádí, že

   autoWrap (class AutoWrap)
           Specifies  whether  or  not  auto-wraparound should be enabled.
           This is the same as the VT102 DECAWM.  The default is "true".

a v XTerm Control Sequences

CSI ? Pm h
          ...
          DEC Private Mode Set (DECSET).
            Ps = 7  -> Wraparound Mode (DECAWM).

což rozhodně nezávisí na vašem výběru terminálu, protože tuto funkci podporuje jakýkoli terminál s kompatibilitou VT100. xterm a rxvt to například dělají. Ostatní to také dělají.

Zda bude tato funkce užitečná pro OP, je diskutabilní. Potlačení zalomení řádku je pouze jedním aspektem problému:

  • Shell zná šířku terminálu - ale to lze potlačit nastavením COLUMNS na „velkou“ hodnotu.
  • To samozřejmě znamená, že aplikace stráví spoustu času psaním na pravý okraj (a některé, i když se to špatně, stejně začnou novou linku).
  • OP pravděpodobně předpokládal, že aplikace bude posouvat doleva/doprava, aby byl široký terminál použitelný. (terminátor to provede - částečně - ale jeho další nevýhody to zruší, s výjimkou těch, kteří používají terminál pouze pro cat 'ing logfile na obrazovku).
  • to, co OP ve skutečnosti hledá, je sada nástrojů, které lze říci, aby zakázaly zalamování řádků, zejména pro prohlížení logfile. Pokud terminál pracuje dostatečně dobře pro všeobecné použití, není relevantní pro výběr nástrojů, které jeden používá v terminálu.

Existují pagery, které umí dělat to, co je potřeba, např. multitail , které jsou uvedeny v jeho vlastnostech

Zalomení linky lze vypnout, poté lze pomocí kurzorových kláves posouvat doleva/doprava

Protože je založený na ncurses, měl by fungovat na kterémkoli z uvedených terminálů.

2
Thomas Dickey

vi

uvnitř typu vi

:set nowrap

Věřím, že existuje také plugin pro vi, který vám dá chování podobné ocasu.

1
Jacques