On Fri 12 Aug 2005 09:33:54 +0800 Xu Qiang <[EMAIL PROTECTED]> 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 _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"