Portál AbcLinuxu, 12. května 2025 07:27

Dotaz: Konzolový slovník v bashi

12.11.2016 18:14 Petr Dvořák
Konzolový slovník v bashi
Přečteno: 442×
Odpovědět | Admin
V konzolovém bash slovníku se musí pokaždé napsat dict a pak teprve slovo, např.:

dict sníh
snow
dict voda
water

Ale já chci slovník spustit, a pak už zadávat jedno slovo za druhým (bez toho dict), např.:

voda
water
sníh
snow
...

Jak upravit bash skript ?

Ř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

12.11.2016 18:21 NN
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jaky skript? Co je to za "slovnik"?
k3dAR avatar 12.11.2016 18:30 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
muzes to pustit ve smycce kdy budes pres read neustale cist radek co chces prelozit, po ententrovani se prelozi a porad dokola, dokud to neprerusis kombinaci CTRL+C
while true; do read prelozit; dict "$prelozit"; done
porad nemam telo, ale uz mam hlavu... nobody
14.11.2016 16:22 Dvořák
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Dík, smyčka funguje. Ještě bych potřeboval změnu bash skriptu, aby to psalo zadání i výsledek na jeden řádek, např.:

voda water
sníh snow
...

Zkoušel sem printf, ale nevyřešil sem to.
14.11.2016 16:52 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Zkoušel sem printf, ale nevyřešil sem to.

Stačí nahlédnout do manuálové stránky, jak funguje echo.

while read slovo; do echo -n "${slovo} "; dict "$slovo"; done

S printf to jde taky, ale možná je to kanón na vrabce.

while read slovo; do printf '%s %s\n' "$slovo" "$(dict "$slovo")"; done
14.11.2016 17:02 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi

Jo aha, dotaz možná byl, jestli se to může psát na tentýž řádek jako zadání po stisku Enter. To sice jde, ale ne úplně triviálně. Budou k tomu potřebné sekvence pro ovládání terminálu. Kompletní návod s příklady je tady.

k3dAR avatar 14.11.2016 20:14 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
pokud by nevadilo ze zadani neni videt pri psani, ale zobrazi se az pak naraz spolecne s prekladem:
while true; do read -s prelozit; echo "$prelozit" $(dict "$prelozit"); done
porad nemam telo, ale uz mam hlavu... nobody
15.11.2016 06:05 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi

Takže tady je varianta, která opravdu posouvá kurzor v terminálu a po zadání slova připíše překlad na tentýž řádek. No, je to trochu fujtajbl.

while read slovo; do echo -en '\x1b['"${#slovo}"'C\x1b[1A '; dict "$slovo"; done
15.11.2016 06:19 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi

(Ukončuje se to pomocí Ctrl+D, jako ostatně všechny rozumně napsané cykly kolem read.)

16.11.2016 19:17 Dvořák
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Opravdu to tiskne na stejný řádek, dík.
13.11.2016 05:49 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin

Smyčka s read je řešením.

Mimochodem, neexistuje žádný „bash slovník“ a příkaz dict nemá nic společného s bashem.

13.11.2016 05:51 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Konzolový slovník v bashi

Tedy, pojem „bash slovník“ připomíná spíš něco jako declare -A pole (tj. asociativní pole) než překlad.

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.