Adapting zmore for the case where you specify the files to display on
the command line is not problem at all:

     > diff kk zmore
     < get_decompressor ()
     < {
     <   case `file ${1--} | sed "s/[^:]*: *\([^ ]*\).*/\1/"` in
     <     "compress"*) DECOMPRESSOR="uncompress -c";;
     <     "gzip"*)     DECOMPRESSOR="gzip -cdfq";;
     <     "bzip2"*)    DECOMPRESSOR="bunzip2 -cdq";;
     <     *)           DECOMPRESSOR="cat";;
     <   esac
     < }
     <                 get_decompressor ${FILE}
     <               ${DECOMPRESSOR} "$FILE" | eval ${PAGER-more}
     >               gzip -cdfq "$FILE" | eval ${PAGER-more}

But when zmore is used as a pipe or with input redirection, things become
more complicated.

               gzip -cdfq | eval ${PAGER-more}

In order to detect the type of data passed on STDIN, the get_decompressor
function or any other means of detection would consume STDIN. STDIN, however
must be passed to the decompressor after the type of data has been
detected. I don't have an idea hot to 'duplicate' STDIN, so it could be
consumed twice. Sure, writing it to a temporary file would be a

     <         FILE="/tmp/.zmore.${$}"
     <         touch ${FILE} 2>/dev/null
     <         if [ "${?}" -ne "0" ]; then
     <           echo "can't create temporary file"
     <           exit 1
     <         fi
     <         chmod 0600 ${FILE}
     <         cat >${FILE}
     <         if [ "${?}" -ne "0" ]; then
     <           echo "can't create temporary file"
     <           rm -f ${FILE}
     <           exit 1
     <         fi
     <         get_decompressor ${FILE}
     <         cat ${FILE} | ${DECOMPRESSOR} | eval ${PAGER-more}
     <         rm -f ${FILE}
     >         gzip -cdfq | eval ${PAGER-more}

But I don't like that. I myself sometimes work with compressed files
larger than anything I would be happy to write to /tmp or somewhere else
(even though those cases usually rather use zcat and its cousinds than


On Sat, Aug 30, 2003 at 12:21:45PM -0400, Chuck Swiger wrote:
> David Kelly wrote:
> [ ... ]
> > Yes, of course. But zmore is smart enough to figure out what to do with
> > several compression techniques, or even to handle non-compressed files
> > very trivially and without hassle.
> 'zmore' is a simple shell script which calls "gzcat | ${PAGER-more}".  One 
> solution to your problem, or at least a solution, would be to change zmore to 
> look for a trailing bz/bz2 or invoke bzcat instead.  Another would be to change 
> the sources of gzip to recognize the bzip2 magic files bytes, extending the 
> detection of gzip versus classic LZH used by compress.
[EMAIL PROTECTED] mailing list
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to