I prefer: for COREFILE in `find / -type f -name core -print` do ... done
Wouldn't that accomplish the same thing? On 8/12/05, Ian Smith <[EMAIL PROTECTED]> wrote: > 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]" > -- blog: http://www.mostlygeek.com _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"