Van egy hosszú és összetett ciklusom és a kimenetre szeretnék greppelni. Nézzük hogyan!
Pl:
for i in $(cat /var/log/apache2/access.log | grep valami | awk '{ print $1 }' | sort | uniq); do resolveip $i; done
Ez a példa eddig feloldja a látogatók ip címét. Viszont én erre a kimenetre szeretnék greppelni. Az egész parancsot két zárójelbe téve lehet a kimenetet továbbküldeni egy programnak (kiírni fájlba stb), jelen esetben a grepnek:
( for i in $(cat /var/log/apache2/access.log | grep valami | awk '{ print $1 }' | sort | uniq); do resolveip $i; done ) | grep "other stuffs"
A zarojelpar subshellben futtatja a ciklust, de pontosan miert van szukseg erre? A \for i in […]; done | grep akarmi\ nem ugyanezt eredmenyezi?
Igazad van, a példát meg lehet oldani zárójel nélkül is. Ha a for ciklus után benne van még pár parancs akkor már nem. pl:
( for; parancs2; parancs3 ) | parancs4
meg cat nelkul is meg lehet oldani 😉