buffering pipes

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Apr 16 16:08:04 EEST 2007


On 2007-04-16 15:44, Nick Demou <ndemou at gmail.com> wrote:
> Οπότε η λύση ειναι αναγκαστικά το script. π.χ. σαν αυτό:
> ---------------------------------------------
> #!/bin/bash
> 
> TMPF="/tmp/buf`cat /proc/sys/kernel/random/uuid`"
> #echo "Start collecting input `date`"
> 
> while read BUFFER
> do
>         echo "$BUFFER" >> $TMPF
> done
> 
> #echo "Start generating output `date`"
> cat $TMPF | my_program
> rm -f $TMPF
> ---------------------------------------------

Ένας πιο portable τρόπος για temporary filename είναι:

    TMPDIR="${TMPDIR-/var/tmp}"
    export TMPDIR

    cleanup()
    {
        if [ -n "${TMPF}" ]; then
            /bin/rm -f "${TMPF}"
        fi
    }
    trap "cleanup ; exit 1" 1 2 15
    trap "cleanup ; exit 0" 0

    TMPF=`mktemp "${TMPDIR}/buf-XXXXXX"`
    if [ $? -ne 0 ]; then
        echo >&2 "`basename $0`: ERROR: failed to create temporary file in ${TMPDIR}"
	exit 1
    fi

    ...

Αυτό θα παίξει σωστά και σε BSD/Solaris, που δεν έχουν virtual file με
όνομα /proc/sys/kernel/random/uuid, και θα σβήσει το temporary file όταν
τελειώσει (ή τερματιστεί με INT, HUP, ή TERM signal).




More information about the Linux-greek-users mailing list