#!/bin/bash
function tisk() {
echo -e "line 1\nline 2\nline 3\nline 4"
}
while read nacteno;do echo "precetl $nacteno";done <(tisk)
Po spusteni to zahlasi chybu
./a: line 7: syntax error near unexpected token `<(tisk)' ./a: line 7: `while read nacteno;do echo "precetl $nacteno";done <(tisk)'Pritom ale nasledujici kod probehne v poradku
#!/bin/bash
function tisk() {
echo -e "line 1\nline 2\nline 3\nline 4"
}
cat <(tisk)
Mate nekdo tuseni, proc nefunguje presmerovani stdin do toho read?
$ echo <(echo "ahoj") /dev/fd/63Místo
while read nacteno;do echo "precetl $nacteno";done <(tisk)prostě použij
tisk | while read nacteno;do echo "precetl $nacteno";donea je vymalováno.
( prikaz1 ; prikaz2 ; prikaz3 ) | while read .... denne, vcetne zjednodusene formy prikaz | while .....
Tohle byl problem v jinem skriptu, ale privedlo me to na jednu myslenku. Pokud spustim prikaz | while read ... ; do A=neco;done, pak promenna A je zapomenuta a v dalsim kodu ji nepouziju. Tak jsem myslel, ze ten <() by mohl tenhle problem resit. while by se provadelo v aktualnim bashi akorat vstup by byl zmenenej z toho prikazu. Jina moznost me napadla zduplikovat STDIN a pak na stdin presmerovat vystup z toho programu neco jako exec 15<&0 <(tisk), ale tohle se mi taky nejak nepovedlo, stejne tak ani bash -c 'while read .....' <(tisk), coz by ale snad fungovat melo.
Nejakej napad, jak spustit while na vystup z nejakyho programu tak, aby ten while bezel v aktualnim bashi a nespustil podproces a zachovaly se tak nastaveni promennych v aktualnim bashi?