Portál AbcLinuxu, 27. dubna 2024 05:58


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
11.8.2010 02:25 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Odpovědět | Sbalit | Link | Blokovat | Admin
Nikdy mi nešlo do hlavy, jak někdo může pojmenovat program wc..
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
11.8.2010 06:17 Joker
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Přece abys mohl říct, že výstup nějakého programu posíláš rourou do wc, ne?
tsLnox avatar 11.8.2010 08:22 tsLnox | skóre: 31 | blog: Blog jednoho ukecaného Gentoolemana | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Rourou do wc... :-D A kolega se diví, co že je na tý práci tak vtipnýho :-D
11.8.2010 16:32 Mortal | skóre: 26 | blog: mortals_log
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Word Count?
V pekle jsou samé diskety a ďábel je velká disketová mechanika
11.8.2010 17:54 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Nejsem až tak blbej, abych to nevěděl :) Ale stejně tak to může být Water Closet :)
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
11.8.2010 08:38 cynan | skóre: 3
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Odpovědět | Sbalit | Link | Blokovat | Admin
Uz jsem videl nekolik clanku/serialu o prikazech v bash a tenhle se mi libi asi nejvic. Bez zbytecnych kecu vypichuje podstatne informace. I kdyz si myslim, ze jsem zkuseny bash coder, tak se vzdy neco noveho dozvim nebo aspon osvezim. Takze diky.
nejlepsi je Ferda
11.8.2010 10:18 lib | skóre: 9
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Odpovědět | Sbalit | Link | Blokovat | Admin
S tím tee jsem narazil na podivnou věc: měl jsem program, který vypisoval během své činnosti do std výstupu řádky logu, okamžitě, po každé akci rovnou naskočil řádek na terminálu. Potřeboval jsem, abych měl zároveň kopii do souboru. Použil jsem tee, tak jak je popsáno a věci přestaly fungovat. Zápisy naskakovaly vždy po delší době, několik řádků najednou a často ještě ne celých. Někde najednou začal působit nějaký buffer. Hledal jsem na webu, ale nenašel jsem jak nastavit unbuffered in/out pro tee...
David Watzke avatar 11.8.2010 10:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
To je hodně zvláštní, vzhledem k tomu, že standard jasně říká:
The tee utility shall not buffer output.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
11.8.2010 11:40 lib | skóre: 9
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
No právě.

Asi to bufferuje shell.
11.8.2010 13:06 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Ahoj, to je vlastnost toho programu (standartnich C funkci pro vystup). Pokud je vystup typu terminal tak se dela "line buffer" (vypisuje se po radcich), jinak se dela "block buffer" (vypisuje se po blocich znaku stejne delky). Nevim jestli existuji nejake nastroje (treba promenne prostredi) jak toto chovani zmenit.
11.8.2010 13:47 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Musíte místo trubky použít pseudoterminál. Bash to bohužel neumí, ale třeba některé moduly v perlu jo.
In Ada the typical infinite loop would normally be terminated by detonation.
11.8.2010 16:48 lib | skóre: 9
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
něco takového jsem se také dočetl, ale nepochopil jsem, jak mám vytvořit "pseudoterminál" a vlastně ani co se tím myslí. Docela mne deprimuje, proč bych měl zcela základní funkcionalitu shellu nahrazovat perlem. Perl neumím a co teď? Mám se ptát v poradně abclinuxu? Jinak dotazů na tenhle problém jsem na googlu našel dva tisíce. Nechápu, proč si člověk nemůže nastavit buffering mode (block, line, unbuffered) přímo v bashi.
11.8.2010 21:53 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Docela mne deprimuje, proč bych měl zcela základní funkcionalitu shellu nahrazovat perlem.

Protože shell má jen omezené možnosti využití. Od jisté hranice je lepší použít nějaký silnější nástroj. Tvorba pseudo terminálu je patrně za touto hranicí.
Perl neumím a co teď?

Zkuste se to naučit, třeba se Vám zalíbí.
Mám se ptát v poradně abclinuxu?
Určitě.
Jinak dotazů na tenhle problém jsem na googlu našel dva tisíce.
Pak je to asi častý problém. Čím častější, tím déle se řeší :)
Nechápu, proč si člověk nemůže nastavit buffering mode (block, line, unbuffered) přímo v bashi.
Protože to nemá nic společného s bashem, ale se způsobem jak funguje OS.

BTW, podle toho komentáře níže byste možná mohl uspět také s tím příkazem stdbuf.
In Ada the typical infinite loop would normally be terminated by detonation.
11.8.2010 19:21 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Nástroj existuje. Coreutils obsahují stdbuf(1).
11.8.2010 22:49 lib
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Pánové děkuji, tohle (stdbuf) je asi to, co hledám. Dva tisíce dotazů a první rozumná odpověď tady na abclinuxu! Hned zítra vyzkouším v ostrém provozu, zda a jak to funguje.
David Watzke avatar 11.8.2010 22:52 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Jenže hnedka v helpu se píše, že na tee to nefunguje :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
12.8.2010 10:50 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)

Protože si myslí, že tee místo fwrite(3) použije write(2), který žádný buffer sám o sobě nezavádí. To ovšem vůbec nemusí být pravda, klidně může použít fwrite(3), ale bufferování musí podle POSIXu vypnout.

Takže bych se osobně přikláněl k verzi, že konkrétní implementace tee byla prostě rozbitá. Jestli na stdout zapisuje tee nebo jiný proces, je totiž z hlediska terminálu jedno.

16.8.2010 11:19 ciernabiela | skóre: 2
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zkousel jsem tohle:
$ printf "Hello world!"
bash: !": event not found
$ printf 'Hello world!'
Hello world!
Jakym zpusobem ale vyresit nasledujici? Expanze promenych vs. specialni znaky, tzn. chci zobrazit hodnotu prom. HOME ale nechci aby mi bash hlasil chybu 'event not found'.
$ printf "$HOME !" 
bash: !": event not found
vs.
$ printf '$HOME !' 
$HOME !
Asi takhle:
$ printf '%s !' $HOME
Nebude teda lepsi davat formatovaci retezec do jednoduchych uvozovek (v pripade BASHe)?
16.8.2010 18:39 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Unixové nástroje – 17 (printf, wc, nl, tee)
$ printf '%s !' $HOME
Raději:
$ printf '%s !' "$HOME"
Nebude teda lepsi davat formatovaci retezec do jednoduchych uvozovek (v pripade BASHe)?
Určitě.

Bonusová otázka: co je špatně u následujícího?
$ printf "$HOME"'!'
In Ada the typical infinite loop would normally be terminated by detonation.

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.