Import NetBSD which and whereis commands.
Change-Id: Ide31b4cc52c64cbd424437f649674a460fb0a754
This commit is contained in:
parent
fc05cedbdd
commit
d24fd34cdf
13 changed files with 335 additions and 182 deletions
|
@ -29,7 +29,7 @@ SUBDIR= add_route arp ash at backup btrace \
|
||||||
telnetd term termcap tget time \
|
telnetd term termcap tget time \
|
||||||
truncate udpstat umount \
|
truncate udpstat umount \
|
||||||
unstack update uud uue version vol \
|
unstack update uud uue version vol \
|
||||||
whereis which writeisofs fetch \
|
writeisofs fetch \
|
||||||
zdump zmodem pkgin_cd pkgin_all \
|
zdump zmodem pkgin_cd pkgin_all \
|
||||||
worldstone updateboot update_bootcfg \
|
worldstone updateboot update_bootcfg \
|
||||||
atnormalize dosread fdisk loadfont \
|
atnormalize dosread fdisk loadfont \
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
SCRIPTS= whereis.sh
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
: List all system directories containing the argument
|
|
||||||
: Author: Terrence W. Holm
|
|
||||||
if test $# -ne 1; then
|
|
||||||
echo "Usage: whereis name"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
path="/bin /lib /etc\
|
|
||||||
/usr/bin /usr/lib\
|
|
||||||
/usr/include /usr/include/sys"
|
|
||||||
|
|
||||||
for dir in $path; do
|
|
||||||
for file in $dir/$1 $dir/$1.*; do
|
|
||||||
if test -f $file; then
|
|
||||||
echo $file
|
|
||||||
elif test -d $file; then
|
|
||||||
echo $file/
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROG= which
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
|
|
@ -1,86 +0,0 @@
|
||||||
/* which - search paths for executable */
|
|
||||||
|
|
||||||
#define DELIMITER ':'
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
int main(int argc, char **argv);
|
|
||||||
|
|
||||||
int main(ac, av)
|
|
||||||
int ac;
|
|
||||||
char **av;
|
|
||||||
{
|
|
||||||
char *path, *cp;
|
|
||||||
char buf[400];
|
|
||||||
char prog[400];
|
|
||||||
char patbuf[512];
|
|
||||||
int quit, none;
|
|
||||||
int excode = 0;
|
|
||||||
|
|
||||||
if (ac < 2) {
|
|
||||||
fprintf(stderr, "Usage: %s cmd [cmd, ..]\n", *av);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
av[ac] = 0;
|
|
||||||
for (av++; *av; av++) {
|
|
||||||
|
|
||||||
quit = 0;
|
|
||||||
none = 1;
|
|
||||||
if ((path = getenv("PATH")) == NULL) {
|
|
||||||
fprintf(stderr, "Null path.\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
strcpy(patbuf, path);
|
|
||||||
path = patbuf;
|
|
||||||
cp = path;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
cp = strchr(path, DELIMITER);
|
|
||||||
if (cp == NULL)
|
|
||||||
quit++;
|
|
||||||
else
|
|
||||||
*cp = '\0';
|
|
||||||
|
|
||||||
if (strcmp(path, "") == 0 && quit == 0) {
|
|
||||||
sprintf(buf, "%s./%s", path, *av);
|
|
||||||
} else
|
|
||||||
sprintf(buf, "%s/%s", path, *av);
|
|
||||||
|
|
||||||
/* Fprintf(stderr,"Trying %s, path %s\n",buf,path); */
|
|
||||||
|
|
||||||
path = ++cp;
|
|
||||||
|
|
||||||
if (access(buf, 1) == 0) {
|
|
||||||
printf("%s\n", buf);
|
|
||||||
none = 0;
|
|
||||||
}
|
|
||||||
sprintf(prog, "%s.%s", buf, "prg");
|
|
||||||
if (access(prog, 1) == 0) {
|
|
||||||
printf("%s\n", prog);
|
|
||||||
none = 0;
|
|
||||||
}
|
|
||||||
sprintf(prog, "%s.%s", buf, "ttp");
|
|
||||||
if (access(prog, 1) == 0) {
|
|
||||||
printf("%s\n", prog);
|
|
||||||
none = 0;
|
|
||||||
}
|
|
||||||
sprintf(prog, "%s.%s", buf, "tos");
|
|
||||||
if (access(prog, 1) == 0) {
|
|
||||||
printf("%s\n", prog);
|
|
||||||
none = 0;
|
|
||||||
}
|
|
||||||
if (quit) {
|
|
||||||
if (none) {
|
|
||||||
fprintf(stderr, "No %s in %s\n", *av, getenv("PATH"));
|
|
||||||
excode = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(excode);
|
|
||||||
}
|
|
|
@ -19,7 +19,7 @@ MAN= ash.1 at.1 \
|
||||||
synctree.1 sysenv.1 sz.1 telnet.1 template.1 \
|
synctree.1 sysenv.1 sz.1 telnet.1 template.1 \
|
||||||
term.1 termcap.1 tget.1 time.1 \
|
term.1 termcap.1 tget.1 time.1 \
|
||||||
truncate.1 umount.1 \
|
truncate.1 umount.1 \
|
||||||
uud.1 uue.1 vol.1 whereis.1 which.1 \
|
uud.1 uue.1 vol.1 \
|
||||||
yap.1 linkfarm.1 pkg_view.1
|
yap.1 linkfarm.1 pkg_view.1
|
||||||
|
|
||||||
MLINKS += ash.1 sh.1
|
MLINKS += ash.1 sh.1
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
.TH WHEREIS 1
|
|
||||||
.SH NAME
|
|
||||||
whereis \- examine system directories for a given file
|
|
||||||
.SH SYNOPSIS
|
|
||||||
\fBwhereis \fIfile\fR
|
|
||||||
.br
|
|
||||||
.de FL
|
|
||||||
.TP
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
\\$2
|
|
||||||
..
|
|
||||||
.de EX
|
|
||||||
.TP 20
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
# \\$2
|
|
||||||
..
|
|
||||||
.SH EXAMPLES
|
|
||||||
.TP 20
|
|
||||||
.B whereis stat.h
|
|
||||||
# Prints: \fI/usr/include/sys/stat.h\fR
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
\fIWhereis\fR searches a fixed set of system
|
|
||||||
directories, \fI/bin\fR, \fI/lib\fR, \fI/usr/bin\fR,
|
|
||||||
and others, and prints all occurrences of the argument name in any of them.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR man (1),
|
|
||||||
.BR which (1).
|
|
|
@ -1,34 +0,0 @@
|
||||||
.TH WHICH 1
|
|
||||||
.SH NAME
|
|
||||||
which \- examine $PATH to see which file will be executed
|
|
||||||
.SH SYNOPSIS
|
|
||||||
\fBwhich \fIname\fR
|
|
||||||
.br
|
|
||||||
.de FL
|
|
||||||
.TP
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
\\$2
|
|
||||||
..
|
|
||||||
.de EX
|
|
||||||
.TP 20
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
# \\$2
|
|
||||||
..
|
|
||||||
.SH EXAMPLES
|
|
||||||
.TP 20
|
|
||||||
.B which a.out
|
|
||||||
# Tells which \fIa.out\fR will be executed
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
The $PATH shell variable controls the
|
|
||||||
\s-1MINIX 3\s-1
|
|
||||||
search rules.
|
|
||||||
If a command \fIa.out\fR is given, the shell first tries to find an
|
|
||||||
executable file in the working directory.
|
|
||||||
If that fails, it looks in various system directories, such as
|
|
||||||
\fI/bin\fR and \fI/usr/bin\fR.
|
|
||||||
The\fR which\fR command makes the same search and gives the absolute
|
|
||||||
path of the program that will be chosen, followed by other occurrences
|
|
||||||
of the file name along the path.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR man (1).
|
|
|
@ -30,7 +30,7 @@ SUBDIR= asa \
|
||||||
uniq units unvis unzip users \
|
uniq units unvis unzip users \
|
||||||
uuidgen vis \
|
uuidgen vis \
|
||||||
\
|
\
|
||||||
wall wc what who whois \
|
wall wc what whereis who whois \
|
||||||
write xargs xinstall xstr yes
|
write xargs xinstall xstr yes
|
||||||
|
|
||||||
.if !defined(__MINIX)
|
.if !defined(__MINIX)
|
||||||
|
|
8
usr.bin/whereis/Makefile
Normal file
8
usr.bin/whereis/Makefile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# $NetBSD: Makefile,v 1.6 2009/04/14 22:15:28 lukem Exp $
|
||||||
|
# from: @(#)Makefile 8.1 (Berkeley) 6/6/93
|
||||||
|
|
||||||
|
PROG= whereis
|
||||||
|
MAN= whereis.1 which.1
|
||||||
|
LINKS= ${BINDIR}/whereis ${BINDIR}/which
|
||||||
|
|
||||||
|
.include <bsd.prog.mk>
|
77
usr.bin/whereis/whereis.1
Normal file
77
usr.bin/whereis/whereis.1
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
.\" $NetBSD: whereis.1,v 1.14 2003/08/07 11:17:17 agc Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 1993
|
||||||
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||||||
|
.\" may be used to endorse or promote products derived from this software
|
||||||
|
.\" without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" @(#)whereis.1 8.3 (Berkeley) 4/27/95
|
||||||
|
.\"
|
||||||
|
.Dd April 3, 2003
|
||||||
|
.Dt WHEREIS 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm whereis
|
||||||
|
.Nd locate programs
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl p
|
||||||
|
.Ar program
|
||||||
|
.Op Ar program ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
utility checks the standard binary directories for the specified programs,
|
||||||
|
printing out the paths of any it finds.
|
||||||
|
.Pp
|
||||||
|
The default path searched is the string returned by the
|
||||||
|
.Xr sysctl 8
|
||||||
|
utility for the
|
||||||
|
.Dq user.cs_path
|
||||||
|
string.
|
||||||
|
If the
|
||||||
|
.Op Fl p
|
||||||
|
option is specified, then the value of the environment
|
||||||
|
variable
|
||||||
|
.Ev PATH
|
||||||
|
is used instead.
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
utility exits 0 on success, 1 on general error, 2 if only some
|
||||||
|
programs were located and 3 if none were.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr whatis 1 ,
|
||||||
|
.Xr which 1 ,
|
||||||
|
.Xr sysctl 8
|
||||||
|
.Sh COMPATIBILITY
|
||||||
|
The historic flags and arguments for the
|
||||||
|
.Nm
|
||||||
|
utility are no longer available in this version.
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
command appeared in
|
||||||
|
.Bx 3.0 .
|
180
usr.bin/whereis/whereis.c
Normal file
180
usr.bin/whereis/whereis.c
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
/* $NetBSD: whereis.c,v 1.21 2008/10/17 10:53:26 apb Exp $ */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#ifndef lint
|
||||||
|
__COPYRIGHT("@(#) Copyright (c) 1993\
|
||||||
|
The Regents of the University of California. All rights reserved.");
|
||||||
|
#endif /* not lint */
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
#if 0
|
||||||
|
static char sccsid[] = "@(#)whereis.c 8.3 (Berkeley) 5/4/95";
|
||||||
|
#endif
|
||||||
|
__RCSID("$NetBSD: whereis.c,v 1.21 2008/10/17 10:53:26 apb Exp $");
|
||||||
|
#endif /* not lint */
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
static void usage(void) __dead;
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct stat sb;
|
||||||
|
size_t len;
|
||||||
|
#ifdef __minix
|
||||||
|
int ch;
|
||||||
|
#else
|
||||||
|
int ch, mib[2];
|
||||||
|
#endif /* def __minix */
|
||||||
|
char *p, *std, path[MAXPATHLEN];
|
||||||
|
const char *t;
|
||||||
|
int which = strcmp(getprogname(), "which") == 0;
|
||||||
|
int useenvpath = which, found = 0;
|
||||||
|
gid_t egid = getegid();
|
||||||
|
uid_t euid = geteuid();
|
||||||
|
|
||||||
|
/* To make access(2) do what we want */
|
||||||
|
if (setgid(egid) == -1)
|
||||||
|
err(1, "Can't set gid to %lu", (unsigned long)egid);
|
||||||
|
if (setuid(euid) == -1)
|
||||||
|
err(1, "Can't set uid to %lu", (unsigned long)euid);
|
||||||
|
|
||||||
|
while ((ch = getopt(argc, argv, "ap")) != -1)
|
||||||
|
switch (ch) {
|
||||||
|
case 'a':
|
||||||
|
which = 0;
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
useenvpath = 1; /* use environment for PATH */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '?':
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if (useenvpath) {
|
||||||
|
if ((std = getenv("PATH")) == NULL)
|
||||||
|
errx(1, "PATH environment variable is not set");
|
||||||
|
} else {
|
||||||
|
/* Retrieve the standard path. */
|
||||||
|
#ifdef __minix
|
||||||
|
/*
|
||||||
|
Note: This path is currently defined here and should probably be defined
|
||||||
|
here, in "ash" or in "sh".
|
||||||
|
To minimize code changes, the path has been hard coded into this file.
|
||||||
|
However, if this path needs to be used in other ported programs, please
|
||||||
|
move this define to <minix/paths.h> and add the include to this file
|
||||||
|
and all files that use _PATH_USER_CS_PATH.
|
||||||
|
*/
|
||||||
|
#define _PATH_USER_CS_PATH "/usr/X11R7/sbin:/usr/local/sbin:/usr/pkg/sbin:/usr/sbin:/sbin:/usr/X11R7/bin:/usr/local/bin:/usr/pkg/bin:/usr/bin:/bin:/usr/games"
|
||||||
|
std = strdup(_PATH_USER_CS_PATH);
|
||||||
|
#else
|
||||||
|
mib[0] = CTL_USER;
|
||||||
|
mib[1] = USER_CS_PATH;
|
||||||
|
if (sysctl(mib, 2, NULL, &len, NULL, 0) == -1)
|
||||||
|
err(1, "sysctl: user.cs_path");
|
||||||
|
if (len == 0)
|
||||||
|
errx(1, "sysctl: user.cs_path (zero length)");
|
||||||
|
if ((std = malloc(len)) == NULL)
|
||||||
|
err(1, NULL);
|
||||||
|
if (sysctl(mib, 2, std, &len, NULL, 0) == -1)
|
||||||
|
err(1, "sysctl: user.cs_path");
|
||||||
|
#endif /* def __minix */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For each path, for each program... */
|
||||||
|
for (; *argv; ++argv) {
|
||||||
|
if (**argv == '/') {
|
||||||
|
if (stat(*argv, &sb) == -1)
|
||||||
|
continue; /* next argv */
|
||||||
|
if (!S_ISREG(sb.st_mode))
|
||||||
|
continue; /* next argv */
|
||||||
|
if (access(*argv, X_OK) == -1)
|
||||||
|
continue; /* next argv */
|
||||||
|
(void)printf("%s\n", *argv);
|
||||||
|
found++;
|
||||||
|
if (which)
|
||||||
|
continue; /* next argv */
|
||||||
|
} else for (p = std; p; ) {
|
||||||
|
t = p;
|
||||||
|
if ((p = strchr(p, ':')) != NULL) {
|
||||||
|
*p = '\0';
|
||||||
|
if (t == p)
|
||||||
|
t = ".";
|
||||||
|
} else
|
||||||
|
if (strlen(t) == 0)
|
||||||
|
t = ".";
|
||||||
|
(void)snprintf(path, sizeof(path), "%s/%s", t, *argv);
|
||||||
|
len = snprintf(path, sizeof(path), "%s/%s", t, *argv);
|
||||||
|
if (p)
|
||||||
|
*p++ = ':';
|
||||||
|
if (len >= sizeof(path))
|
||||||
|
continue; /* next p */
|
||||||
|
if (stat(path, &sb) == -1)
|
||||||
|
continue; /* next p */
|
||||||
|
if (!S_ISREG(sb.st_mode))
|
||||||
|
continue; /* next p */
|
||||||
|
if (access(path, X_OK) == -1)
|
||||||
|
continue; /* next p */
|
||||||
|
(void)printf("%s\n", path);
|
||||||
|
found++;
|
||||||
|
if (which)
|
||||||
|
break; /* next argv */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((found == 0) ? 3 : ((found >= argc) ? 0 : 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
(void)fprintf(stderr, "Usage: %s [-ap] program [...]\n", getprogname());
|
||||||
|
exit(1);
|
||||||
|
}
|
67
usr.bin/whereis/which.1
Normal file
67
usr.bin/whereis/which.1
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
.\" $NetBSD: which.1,v 1.2 2010/04/05 16:13:58 joerg Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 1980, 1991 Regents of the University of California.
|
||||||
|
.\" All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||||||
|
.\" may be used to endorse or promote products derived from this software
|
||||||
|
.\" without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" from: @(#)which.1 6.3 (Berkeley) 4/23/91
|
||||||
|
.\" $NetBSD: which.1,v 1.2 2010/04/05 16:13:58 joerg Exp $
|
||||||
|
.\"
|
||||||
|
.Dd April 23, 1991
|
||||||
|
.Dt WHICH 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm which
|
||||||
|
.Nd "locate a program file in the users $PATH environment variable"
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Op Fl a
|
||||||
|
.Ar name
|
||||||
|
.Op Ar ...
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
takes a list of names and looks for the files which would be
|
||||||
|
executed had these names been given as commands.
|
||||||
|
Each argument is searched for along the user's
|
||||||
|
.Ev PATH .
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
|
.Fl a
|
||||||
|
flag is given,
|
||||||
|
.Nm
|
||||||
|
will continue to search the
|
||||||
|
.Ev PATH
|
||||||
|
until all instances of a program file are found.
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Nm
|
||||||
|
command appeared in
|
||||||
|
.Bx 3.0 .
|
||||||
|
.Sh BUGS
|
||||||
|
This implementation does not expand
|
||||||
|
.Xr csh 1
|
||||||
|
aliases, and is shell agnostic.
|
||||||
|
This is really a feature.
|
Loading…
Reference in a new issue