Gondolom, a pipe valami külön processzt csinál, de elég meglepő volt.
- gd blogja
- A hozzászóláshoz be kell jelentkezni
- 644 megtekintés
Hozzászólások
$ var=1; if true; then var=0; fi | cat; echo $var
1
$ echo ${0:-}
-ksh
Nem csak bash-ben, hanem valoszinuleg minden Unix shellben igy mukodik.
- A hozzászóláshoz be kell jelentkezni
> $ var=1; if true; then var=0; fi | cat; echo $var
Próbáld így:
(var=1; if true; then var=0; fi) | (cat; echo $var)
> a pipe valami külön processzt csinál
Inkább "process group"-ot, ami a létrehozásakor megörökli a környezeti változókat.
- A hozzászóláshoz be kell jelentkezni
> (var=1; if true; then var=0; fi) | (cat; echo $var)
Ez se működik, ami érthető, mert a ( ) subshellben futtatja a parancsokat. De ez se működik:
var=1; if true; then var=0; fi | echo $var
, azaz a pipe bal oldalán beállított változót már a pipe jobb oldala se látja.
- A hozzászóláshoz be kell jelentkezni
> azaz a pipe bal oldalán beállított változót már a pipe jobb oldala se látja.
Kísérletezz nyugodtan. Ebből például:
var=1; echo 1:$var; (if true; then var=0; fi ; echo 2:$var | cat; echo 3:$var ); echo 4:$var
Ez lesz:
1:1
2:0
3:0
4:1
- A hozzászóláshoz be kell jelentkezni