Van egy ilyen ciklusom:
for sor in $(parancs1); do
echo "$sor"
done
Félóráig fut anélkül, hogy egy sort is kiirna, pedig a "parancs1" egy "line buffered" parancs, és átlag percenként produkál egy sort.
Úgy néz ki, mintha a $(...) konstrukció lenne bufferelve, és amig a buffer meg nem telik, addig a "sor" változóhoz nem rendel értéket.
Meg lehet valahogy oldani, hogy a ciklus "real-time", azaz max. sor bufferelt legyen, vagyis azonnal adjon értéket a "sor" változónak, amint parancs1 előállít egy sort?
- 1209 megtekintés
Hozzászólások
ez nem jó? :
$ parancs1 | while read sor ; do echo "$sor"; done
- A hozzászóláshoz be kell jelentkezni
De jó. Isten vagy!
---
Mondjon le!
- A hozzászóláshoz be kell jelentkezni
Úgy működik, ahogy kell: a shell elindít egy másikat $(), megvárja, mit ad vissza, és a kimenetét behelyettesíti, majd az így kapott lista minden elemére végrehajtja a ciklusban szereplő utasítást. A subshell hívásnak tehát be kell fejeződnie, mielőtt a behelyettesítés megtörténik, sőt az egész kimenetének, meg a ciklusnak bele kell férnie az aktuális parancsértelmező maximális parancssormértébe is.
- A hozzászóláshoz be kell jelentkezni