Portál AbcLinuxu, 16. července 2025 05:31


Dotaz: Bash, nechápu Process Substitution

1.3.2004 17:26 Begleiter | skóre: 47 | blog: muj_blog | Doma
Bash, nechápu Process Substitution
Přečteno: 137×
Odpovědět | Admin

Mohl by mi někdo napsat jednoduchý okomentářovaný příkládek využívající této konstrukce, tj. <(list) a >(list)?

Použítí FIFO (pojmenované roury) jsem pochopil, ale tohle ne.

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

Odpovědi

1.3.2004 18:45 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
Odpovědět | | Sbalit | Link | Blokovat | Admin

Už mám v hlavě jasněji.

 # Např.
 tar cf >(bzip2 -c > soubor.tar.bz2) adresar
 # v zákulisí je něco jako
 # tar cf /dev/fd/neco adresar
 # bzip2 -c < /dev/fd/neco > soubor.tar.bz2

 # 
 # můžu napsat jako
 mkfifo FIFO
 tar cf - adresar > FIFO
 bzip2 -c < FIFO > soubor.tar.bz2 # v jiné konzoli
 # nebo taky můžu zapsat
 tar cf - adresar | bzip2 -c > soubor.tar.bz2

 # A rozbalení souboru
 tar xf - < <(bzcat soubor.tar.bz2)
Josef Kufner avatar 1.3.2004 19:21 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Bash, nechápu Process Substitution

> # Např.
> tar cf >(bzip2 -c > soubor.tar.bz2) adresar
nedalo by se to napsat nejak takle?
tar cf adresar | bzip2 -c > soubor.tar.bz2
Hello world ! Segmentation fault (core dumped)
1.3.2004 20:32 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
 tar cf - adresar | bzip2 -c > soubor.tar.bz2

Symbol "-" by tam měl být. Způsobí přesměrování dat na standardní výstup.

1.3.2004 22:44 Karel Rank | skóre: 8
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
par. f tam nemusi byt vubec. defaultne to jde na stdout (zalezi na verzi taru?)
1.3.2004 23:14 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
Mh, GNU tar má jako default stdout od verze 1.11.5, dřív to býval /dev/rmt0 (dodnes je jako default napsaný v manuálové stránce), a divil bych se, kdyby ostatní *nixové tary nezoušely defaultně zálohovat na nějakou pásku...
1.3.2004 20:56 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
IMHO v tom tedy pořád nemáš jasno, pokud píšeš
tar xf - < <(bzcat soubor.tar.bz2)
namísto
tar xf <(bzcat soubor.tar.bz2)
Protože: <(bzcat soubor.tar.bz2) udělá dvě věci: spustí bzcat soubor.tar.bz2 a jeho výstup (stdout) přesměruje do /dev/fd/něco. Toto /dev/fd/něco pak dostane tar jako argument (o čemž se lze přesvědčit, když tar xf nahradíš třeba echo -- vypíše to /dev/fd/něco).
2.3.2004 08:20 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Bash, nechápu Process Substitution
 prikaz >(prikazy)

>(prikazy) bude nahrazeno /dev/fd/neco. prikaz zapisuje data do souboru /dev/fd/neco, neboli na vstup (stdin) části prikazy.

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.