Nacitani promennych v bash

Alexandr Malusek malusek na hroch.ujf.cas.cz
Čtvrtek Únor 12 12:46:40 CET 1998


mpolak na informatics.muni.cz (Michal Polak) writes:

> Napsal jsem si skript v BASHi.
> 
> #/bin/bash
> echo -e Vysledek'\n'ze'\n'skriptu | read A B C
> echo $A,$B,$C
> 
> Potrebuju do promennych dostat jednotlive radky nejakeho vystupu.
> Bohuzel, promenne A,B,C jsou prazdne.

No, asi by to chtelo tu tvorivost take doplnit cetbou dokumentace.
Pres rouru to samozrejme cist nemuzete - pro read se vytvori
samostatny shell, ten nacte hodnoty promennych, a pak skonci. Tim se
ztrati i prommenne.

Reseni je nekolik. Nasledujici pouziva fifo, misto fifo je samozrejme
mozne pouzit normalni soubor.

$ cat s1
#!/bin/sh
mkfifo fifo
echo -e Vysledek'\n'ze'\n'skriptu > fifo &
{ read A; read B; read C } <fifo
echo A = $A, B = $B, C = $C
rm fifo
$ ./s1
A = Vysledek, B = ze, C = skriptu

Dalsi moznosti je pouzit "coroutines", v "man ksh" se tomu rika
co-processes. Pres "read -p" a "print -p" je mozne komunikovat s
procesem bezicim na pozadi. 

$ cat s2
#!/bin/ksh
echo -e Vysledek'\n'ze'\n'skriptu |&
read -p A; read -p B; read -p C
echo A = $A, B = $B, C = $C
$ s2
A = Vysledek, B = ze, C = skriptu

O moznosti pouzivat "coroutines" v ksh vi relativne malo uzivatelu,
tak tento prispevek berte jako formu osvety :-). Mimochodem, pouziti
ksh (pdksh) pro programovani komplikovanejsich skriptu v Linuxu se mi
velmi osvedcilo.

--
A. Malusek  (malusek na ujf.cas.cz)
UJF AV CR


Další informace o konferenci Linux