Üdv!
Adott egy ciklus:
x="semmi" ls | while read aaa do ......echo $aaa ......x="valami" ......echo $x done echo "x="$x
A ciklus végbemegy, de az x éeréke a ciklusban "valami" lesz, de ciklusból kilépve "semmi". Próbáltam export-olni is, de akkor sem. Viszont, ha a ciklust nem egy program kimenete vezérli, akkor helyesen műxik:
i=0 x="semmi" while [ $i -lt 3 ] do ......i=`expr $i + 1` ......x="valami" done echo "x="$x
- 5104 megtekintés
Hozzászólások
Szerintem a gond a redirecttel van, mert a pipe egy subshellt indit.
http://tldp.org/LDP/abs/html/subshells.html
(és amit keresel azok a code tag-ek: http://hup.hu/filter/tips )
- A hozzászóláshoz be kell jelentkezni
Hja. Kicsit késtem. :) http://www.kilala.nl/Sysadmin/index.php?id=741
/etc/lib/lu/plugins/lupi_bebasic
- A hozzászóláshoz be kell jelentkezni
x=123 ; echo $x ; ls | { while read a ; do x=$a ; done ; echo $x;}
de az 'ls |' helyett inkabb 'for i in *' es nem is all fenn a problema
- A hozzászóláshoz be kell jelentkezni
A for is jó, de ha előfordulhat szóköz a fájl nevében, akkor azt szétvágja; az IFS-nek ezért még érdemes utánanézni (itt hup-on is volt már).
- A hozzászóláshoz be kell jelentkezni
itt az elso sor a lenyeges: a { ;} group command, ami az aktualis shell kornyezetben fut le, kivedve a problemat.
a glob pedig azert van, hogy hasznaljuk.
a * tokeletesen mukodik szokozos fileokra.
az IFS-t remelem nem nekem irtad.
- A hozzászóláshoz be kell jelentkezni
Törölve, benéztem.
- A hozzászóláshoz be kell jelentkezni
Rendszeresen újrafelfedezett probléma, amelyre a kevésbé szűkszavú dokumentációk megoldást is javasolnak. Pl.
http://fvue.nl/wiki/Bash:_Piped_%60while-read%27_loop_starts_subshell
- A hozzászóláshoz be kell jelentkezni