Date: Sat, 13 Aug 2005 05:18:21 +1000 (EST) From: Ian Smith <smithi@nimnet.asn.au> To: freebsd-questions@freebsd.org Cc: Xu Qiang <Qiang.Xu@fujixerox.com> Subject: Help on bash script? Message-ID: <Pine.BSF.3.96.1050813044601.8009A-100000@gaia.nimnet.asn.au> In-Reply-To: <20050812013604.8C12D16A422@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri 12 Aug 2005 09:33:54 +0800 Xu Qiang <Qiang.Xu@fujixerox.com> wrote: > find / -type f -name core -print | while read COREFILE ; do > NCOREFILES=$[ $NCOREFILES + 1 ] # a bit strange - xq > echo $NCOREFILES # xq > > NEWNAME="${HOSTNAME}esscore${NCOREFILES}_${TIMESTAMP}" > # record mapping so people can go back and figure out > # where they came from > echo -e $NEWNAME " was " `ls -l $COREFILE` >> $SAVE_DIR/$CORELOG > mv $COREFILE $SAVE_DIR/$NEWNAME > > echo "There are $NCOREFILES core files." # xq > done > > fi > > # What confused me most is the value $NCOREFILES outside > # the do-while loop (but still in this function) reverted > # back to its initial value, which seems contradictory to > # our concept of local variables. - xq > #echo $NCOREFILES It's been pointed out that the find piped to while runs in a subshell, and that changes to variables within aren't seen by its parent, but one way around this is to avoid using a pipe, thus a subshell, for instance: find / -type f -name "*.core" -print >tempfile while read COREFILE; do [.. stuff ..] NCOREFILES=$(($NCOREFILES + 1)) done <tempfile echo $NCOREFILES I use sh, not bash, but suspect that this should work in bash too. cheers, Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.1050813044601.8009A-100000>