Portál AbcLinuxu, 26. dubna 2024 18:46


Dotaz: Jak v bashi znát kdykoliv šířku terminálu (sloupců)

7.12.2012 13:55 Zadejte vaše jméno
Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Přečteno: 336×
Odpovědět | Admin
Ahoj, zjišťuji pomocí
WIDTH=$(tput cols)
šířku terminálu, ale nevím jak mám pohlídat změnu velikosti terminálu, pokud okno terminálu zvetším, není zobrazení zprávne, neporadí někdo? 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

7.12.2012 14:32 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neukladať údaj do premennej, ale vždy si ho znovu zistiť tesne pred použitím.
7.12.2012 15:02 Zadejte vaše jméno
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
To na změnu terminálu ale nemá žádný vliv, změna se projeví až po první nějaké akci, jinak ne.
Pavel Stárek avatar 7.12.2012 15:01 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Třeba takto:
#!/bin/bash
trap 'get_window_size' WINCH                    # trap when a user has resized the window
get_window_size() {
    _WINDOW_X=`tput lines`
    _WINDOW_Y=`tput cols`
    echo "X: $_WINDOW_X"
    echo "Y: $_WINDOW_Y"
    return 0
}

while read ALINE
do
    echo "Read: '$ALINE'"
done
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
9.12.2012 01:18 Pepa
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Hoj, študuju tady ten váš post, nemůžete to trochu popsat co to dělá/nedělá? Dík
9.12.2012 10:11 l4m4
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
WINCH je signál, který proces dostane při změně velikosti terminálu. Zbytek je snad jasný.
9.12.2012 10:17 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)

Neber ma zle, ale:

bash -c "help trap"
trap -l
man 7 signal

V podstate trap sleduje jemu zadany signal a na zaklade neho sa vykona rad akcii, ak su dake zadefinovane. Vo funkcii vyssie je to vypisanie rozmerov okna terminalu.

7.12.2012 15:02 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo $COLUMNS
9.12.2012 10:22 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)

Funkcne pre vypisanie hodnoty poctu znakov na sirku ( rovnako ako echo $LINES , len pre pocet riadkov ) len pri interaktivnom shell-i !!! V skriptoch to nebude fungovat. Ibaze by  sa shebang nastavil na #! /bin/bash -i . Takze to moje riesnim nie je a zial neviem to zmenit. :)

pavlix avatar 9.12.2012 13:35 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jak v bashi znát kdykoliv šířku terminálu (sloupců)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně by spíš zajímalo, čím to je, že když se přes SSH připojím na virtuální sériovou konzili (například virsh console), tak mi ten terminál prostě blbne.

Aby to aspoň trochu dobře fungovalo, používám:
TERM=xterm bash
A celoobrazovkové programy jako vim fungují dobře jen s velkým oknem a i tak používají pevně daný počet řádků a sloupců. Ale ten bash stále blbne. Když píšu dlouhý příkaz přes konec řádku, místo nového řádku začne přepisovat začátek.

Myslel jsem si, že seriák je prostě přenosová vrstva pro proudy znaků, takže když je na jedné straně aplikace (shell, vim, cokoli) a na druhé straně xterm, tak že by to mělo být stejné jako jakýkoli jiný terminál.

Tak pardon, že se přiživuju na jiné otázce, ale když už je to tu, tak jsem si nemohl nevzpomenout.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.

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.