1######################################################################## 2# # 3# This software is part of the ast package # 4# Copyright (c) 1994-2011 AT&T # 5# and is licensed under the # 6# Common Public License, Version 1.0 # 7# by AT&T # 8# # 9# A copy of the License is available at # 10# http://www.opensource.org/licenses/cpl1.0.txt # 11# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12# # 13# Information and Software Systems Research # 14# AT&T Research # 15# Florham Park NJ # 16# # 17# Glenn Fowler <gsf@research.att.com> # 18# # 19######################################################################## 20: convert command that operates on file args to pipeline filter 21 22command=filter 23 24tmp=/tmp/$command$$ 25suf= 26 27case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in 280123) ARGV0="-a $command" 29 USAGE=$' 30[-? 31@(#)$Id: filter (AT&T Labs Research) 2001-05-31 $ 32] 33'$USAGE_LICENSE$' 34[+NAME?filter - run a command in stdin/stdout mode] 35[+DESCRIPTION?\bfilter\b runs \acommand\a in a mode that takes input from 36 the \afile\a operands, or from the standard input if no \afile\a 37 operands are specified, and writes the results to the standard output. 38 It can be used to run commands like \bsplit\b(1), that normally modify 39 \afile\a operands in-place, in pipelines. The \afile\a operands are 40 not modified; \acommand\a is run on copies in \b/tmp\b.] 41 42command [ option ... ] [ file ... ] 43 44[+SEE ALSO?\bstrip\b(1)] 45' 46 ;; 47*) ARGV0="" 48 USAGE="command [ option ... ] [ file ... ]" 49 ;; 50esac 51 52usage() 53{ 54 OPTIND=0 55 getopts $ARGV0 "$USAGE" OPT '-?' 56 exit 2 57} 58 59while getopts $ARGV0 "$USAGE" OPT 60do case $OPT in 61 *) usage ;; 62 esac 63done 64shift `expr $OPTIND - 1` 65case $# in 660) usage ;; 67esac 68 69cmd=$1 70while : 71do shift 72 case $# in 73 0) break ;; 74 esac 75 case $1 in 76 -*) cmd="$cmd $1" ;; 77 *) break ;; 78 esac 79done 80trap 'rm -f $tmp$suf' 0 1 2 3 15 81case $# in 820) cat > $tmp 83 $cmd $tmp 84 ;; 85*) for file 86 do suf=${file##*/} 87 case $suf in 88 *.*) suf=.${suf#*.} ;; 89 *) suf= ;; 90 esac 91 cp $file $tmp$suf || exit 1 92 chmod u+rwx $tmp$suf || exit 1 93 $cmd $tmp$suf || exit 1 94 cat $tmp$suf 95 rm -f $tmp$suf 96 done 97 ;; 98esac 99