v06i105: A "which" for non-BSD systems (att_which)
sources-request at mirror.UUCP
sources-request at mirror.UUCP
Wed Aug 13 07:58:10 AEST 1986
Submitted by: Paul Vixie <pyrnj!pyramid!hplabs!hpsemc!vix>
Mod.sources: Volume 6, Issue 105
Archive-name: att_which
[ I threw together a manpage. This program doesn't handle aliases,
but if you had aliases you wouldn't need this program, would you?
--r$ ]
#!/bin/sh
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
# Contents: README which.1 Makefile which.c
echo x - README
if test -f README ; then
echo README exists, putting output in $$README
OUT=$$README
else
OUT=README
fi
sed 's/^XX//' > $OUT <<'@//E*O*F README//'
XX26-July-1985
XXVersion 1.0
XXThis is another C implementation of the 'which' command, written because
XX(a) is was easy, (b) I didn't know how to find the original, and (c) HP-UX
XXon the 9000 series 300 and 500 doesn't have it.
XXTo install, unshar into an empty directory, edit the Makefile to change the
XXDESTDIR (probably to /usr/local, /usr/local/bin or /usr/ucb), then su and
XXtype 'make install'. If all goes well type 'make clean' or even 'rm *' if
XXyou saved the distribution kit.
XXQuestions, problems, flames, to:
XX Paul Vixie
XX ucbvax!dual!qantel!vixie!paul
@//E*O*F README//
chmod u=rw,g=rw,o= README
echo x - which.1
if test -f which.1 ; then
echo which.1 exists, putting output in $$which.1
OUT=$$which.1
else
OUT=which.1
fi
sed 's/^XX//' > $OUT <<'@//E*O*F which.1//'
XX.TH WHICH 1 LOCAL
XX.SH NAME
XXwhich \- show full path of commands
XX.SH SYNOPSIS
XX.B which
XXprogname ...
XX.SH DESCRIPTION
XX.I Which
XXtakes a series of program names, and prints
XXout the full pathname of the program that the shell would call to
XXexecute it.
XXIt does this by simulating the shells searching of the
XX.B $PATH
XXenvironment variable.
XX.SH "SEE ALSO"
XXThe exec(2,3) family.
@//E*O*F which.1//
chmod u=rw,g=rw,o=rw which.1
echo x - Makefile
if test -f Makefile ; then
echo Makefile exists, putting output in $$Makefile
OUT=$$Makefile
else
OUT=Makefile
fi
sed 's/^XX//' > $OUT <<'@//E*O*F Makefile//'
XX# makefile for 'which'
XX# vix 25jul86 [written]
XXCFLAGS = -O
XXDESTDIR = /mnt/local/bin
XX.c.o :
XX cc $(CFLAGS) -c $<
XXall : which
XXwhich : which.o
XX cc -o which which.o
XXwhich.o : which.c
XXinstall : all
XX mv which $(DESTDIR)
XX chmod 775 $(DESTDIR)/which
XXclean :
XX rm -f which.o
XXkit : clean
XX shar -bcsv README Makefile which.c > which.shar
@//E*O*F Makefile//
chmod u=rw,g=rw,o= Makefile
echo x - which.c
if test -f which.c ; then
echo which.c exists, putting output in $$which.c
OUT=$$which.c
else
OUT=which.c
fi
sed 's/^XX//' > $OUT <<'@//E*O*F which.c//'
XX/* which - C version of the unix/csh 'which' command
XX * vix 23jul86 [written]
XX * vix 24jul86 [don't use dynamic memory]
XX */
XX#include <stdio.h>
XXstatic char *myname;
XXmain(argc, argv)
XXint argc;
XXchar *argv[];
XX{
XX char *getenv(), *path = getenv("PATH");
XX myname = argv[0];
XX for (argc--, argv++; argc; argc--, argv++)
XX if (0 != which(*argv, path))
XX exit(1);
XX exit(0);
XX}
XXstatic which(name, path)
XXchar *name, *path;
XX{
XX char test[1000], *pc, *malloc(), save;
XX int len, namelen = strlen(name), found;
XX pc = path;
XX found = 0;
XX while (*pc != '\0' && found == 0)
XX {
XX len = 0;
XX while (*pc != ':' && *pc != '\0')
XX {
XX len++;
XX pc++;
XX }
XX save = *pc;
XX *pc = '\0';
XX sprintf(test, "%s/%s", pc-len, name);
XX *pc = save;
XX if (*pc)
XX pc++;
XX found = (0 == access(test, 01)); /* executable */
XX if (found)
XX puts(test);
XX }
XX if (found == 0)
XX {
XX printf("%s: no %s in (%s)\n", myname, name, path);
XX return 1;
XX }
XX return 0;
XX}
@//E*O*F which.c//
chmod u=rw,g=rw,o=rw which.c
echo Inspecting for damage in transit...
temp=/tmp/sharin$$; dtemp=/tmp/sharout$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
16 90 558 README
16 66 368 which.1
25 57 354 Makefile
57 152 925 which.c
114 365 2205 total
!!!
wc README which.1 Makefile which.c | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if test -s $dtemp
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0
More information about the Mod.sources
mailing list