]> Zhao Yanbai Git Server - minix.git/commitdiff
Importing usr.bin/env 54/1054/1
authorThomas Cort <tcort@minix3.org>
Fri, 18 Oct 2013 13:06:27 +0000 (09:06 -0400)
committerThomas Cort <tcort@minix3.org>
Fri, 18 Oct 2013 13:16:20 +0000 (09:16 -0400)
Replaces commands/env. No Minix-specific changes needed.

Change-Id: I1aefebe360962ae52241384c54f9466253d783c6

commands/Makefile
commands/env/Makefile [deleted file]
commands/env/env.c [deleted file]
man/man1/Makefile
man/man1/env.1 [deleted file]
releasetools/nbsd_ports
usr.bin/Makefile
usr.bin/env/Makefile [new file with mode: 0644]
usr.bin/env/env.1 [new file with mode: 0644]
usr.bin/env/env.c [new file with mode: 0644]

index 9ba275a4a5e741106bf4d0015e717697a7927851..062cdda9ed6b9d079a1b8f22a637c170f2ee3e69 100644 (file)
@@ -8,7 +8,7 @@ SUBDIR= add_route arp ash at backup btrace \
        comm compress cp crc cron crontab \
        dd decomp16 DESCRIBE devmand devsize df dhcpd \
        dhrystone diff diskctl dumpcore \
-       eject env factor fbdctl \
+       eject factor fbdctl \
        find fix fold format fortune fsck.mfs \
        gcore gcov-pull getty grep hexdump host \
        hostaddr id ifconfig ifdef \
diff --git a/commands/env/Makefile b/commands/env/Makefile
deleted file mode 100644 (file)
index 1e34c07..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PROG=  env
-MAN=
-
-.include <bsd.prog.mk>
diff --git a/commands/env/env.c b/commands/env/env.c
deleted file mode 100644 (file)
index b3f9d50..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*     env 1.1 - Set environment for command           Author: Kees J. Bot
- *                                                             17 Dec 1997
- */
-#define nil 0
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-
-int main(int argc, char **argv)
-{
-       int i;
-       int iflag= 0;
-       int aflag= 0;
-       extern char **environ;
-
-       i= 1;
-       while (i < argc && argv[i][0] == '-') {
-               char *opt= argv[i++] + 1;
-
-               if (opt[0] == '-' && opt[1] == 0) break;        /* -- */
-
-               if (opt[0] == 0) iflag= 1;                      /* - */
-
-               while (*opt != 0) switch (*opt++) {
-               case 'i':
-                       iflag= 1;       /* Clear environment. */
-                       break;
-               case 'a':               /* Specify arg 0 separately. */
-                       aflag= 1;
-                       break;
-               default:
-                       fprintf(stderr,
-               "Usage: env [-ia] [name=value] ... [utility [argument ...]]\n");
-                       exit(1);
-               }
-       }
-
-       /* Clear the environment if -i. */
-       if (iflag) *environ= nil;
-
-       /* Set the new environment strings. */
-       while (i < argc && strchr(argv[i], '=') != nil) {
-               if (putenv(argv[i]) != 0) {
-                       fprintf(stderr, "env: Setting '%s' failed: %s\n",
-                               argv[i], strerror(errno));
-                       exit(1);
-               }
-               i++;
-       }
-
-       /* Environment settings and command may be separated with '--'.
-        * This is for compatibility with other envs, we don't advertise it.
-        */
-       if (i < argc && strcmp(argv[i], "--") == 0) i++;
-
-       if (i >= argc) {
-               /* No utility given; print environment. */
-               char **ep;
-
-               for (ep= environ; *ep != nil; ep++) {
-                       if (puts(*ep) == EOF) {
-                               fprintf(stderr, "env: %s\n", strerror(errno));
-                               exit(1);
-                       }
-               }
-               return 0;
-       } else {
-               char *util, **args;
-               int err;
-
-               util= argv[i];
-               args= argv + i;
-               if (aflag) args++;
-               (void) execvp(util, args);
-               err= errno;
-               fprintf(stderr, "env: Can't execute %s: %s\n",
-                       util, strerror(err));
-               return err == ENOENT ? 127 : 126;
-       }
-}
index 6e2f2deb6771ea180f0ed67e3fb79c23cbfab48e..94222a905e78327fae83c1a4ea041c07a0413054 100644 (file)
@@ -4,7 +4,7 @@ MAN=    ash.1 at.1 \
        cp.1 crc.1 crontab.1 dd.1 \
        df.1 dhrystone.1 dosdir.1 dosread.1 doswrite.1 \
        dumpcore.1 eject.1 \
-       env.1 factor.1 \
+       factor.1 \
        flexdoc.1 fold.1 format.1 fortune.1 \
        fsck.mfs.1 host.1 hostaddr.1 ifdef.1 \
        isodir.1 isoinfo.1 isoread.1 \
diff --git a/man/man1/env.1 b/man/man1/env.1
deleted file mode 100644 (file)
index bcc9735..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-.TH ENV 1
-.SH NAME
-env \- set environment for command
-.SH SYNOPSIS
-.B env
-.RB [ \-ia ]
-.RI [ name\fB=\fIvalue "] ..."
-.RI [ utility
-.RI [ argument "...]]"
-.B printenv
-.RB [ \-ia ]
-.RI [ name\fB=\fIvalue "] ..."
-.RI [ utility
-.RI [ argument "...]]"
-.SH DESCRIPTION
-.B Env
-modifies its environment according to the
-.IB name = value
-arguments, and executes
-.I utility
-with the given arguments and the modified environment.
-.PP
-If no utility is specified then the modified environment is printed as
-.IB name = value
-strings, one per line.
-.PP
-.B printenv
-is identical to env in every way and is included for backward compatibility
-.SH OPTIONS
-.TP
-.B \-i
-Use exactly the environment specified by the arguments; the inherited
-environment is ignored.
-.TP
-.B \-a
-Specify all arguments for the utility, i.e. the first of the arguments is
-used as
-.BR "argv[0]" ,
-the program name.  Normally the program name is
-.I utility
-itself.
-.SH ENVIRONMENT
-.TP 8n
-.B PATH
-The path used to find utility.  It is as modified by
-.BR env ,
-i.e.
-.B not
-the inherited
-.BR PATH .
-.SH "SEE ALSO"
-.BR sh (1),
-.BR execvp (3),
-.BR environ (5).
-.SH DIAGNOSTICS
-The return code is
-.B 0
-after successfully printing the environment,
-.B 1
-on an error within
-.BR env ,
-.B 126
-if the
-.I utility
-could not be executed, or
-.B 127
-if
-.I utility
-could not be found.  Appropriate diagnostic messages are printed on standard
-error.
-If
-.I utility
-can be executed then it replaces
-.BR env ,
-so the return code is then the return code of
-.IR utility .
-.SH NOTES
-When run from the standard shell
-.B env
-is only useful with options or without arguments.  Otherwise the shell can
-do exactly what
-.B env
-can do, simply omit the word "env" on the command line.
-.PP
-One interesting use of
-.B env
-is with #! on the first line of a script to forge a PATH search for an
-interpreter.  For example:
-.PP
-.RS
-#!/usr/bin/env perl
-.RE
-.PP
-This will find the Perl interpreter if it is within the user's PATH.  Most
-UNIX-like systems have
-.B env
-in /usr/bin, but
-.B perl
-may be anywhere.
-.SH AUTHOR
-Kees J. Bot <kjb@cs.vu.nl>
index a73e8564b7c4109d21e84787fedbd7b329c533a6..9cbdec721e6023eba22ea00331e6a9d0183930db 100644 (file)
 2012/10/17 12:00:00,usr.bin/dirname
 2011/09/01 13:37:33,usr.bin/du
 2012/10/17 12:00:00,usr.bin/expand
+2013/10/17 12:00:00,usr.bin/env
 2013/05/31 12:00:00,usr.bin/finger
 2013/03/22 12:00:00,usr.bin/from
 2013/04/05 12:00:00,usr.bin/ftp
index 7e60dd08af84e5d90d960eed35c62abfd735438c..94d9446710b287ad97f6020844d9db8d668ee410 100644 (file)
@@ -9,7 +9,7 @@ SUBDIR= \
        cal chpass cksum \
        col column ctags cut \
        dirname du \
-       expand \
+       env expand \
        finger from \
        ftp genassym getopt \
        head indent infocmp join \
diff --git a/usr.bin/env/Makefile b/usr.bin/env/Makefile
new file mode 100644 (file)
index 0000000..aef90b0
--- /dev/null
@@ -0,0 +1,6 @@
+#      $NetBSD: Makefile,v 1.4 1995/09/28 07:34:35 perry Exp $
+#      @(#)Makefile    8.1 (Berkeley) 6/6/93
+
+PROG=  env
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/env/env.1 b/usr.bin/env/env.1
new file mode 100644 (file)
index 0000000..d4597bd
--- /dev/null
@@ -0,0 +1,122 @@
+.\"    $NetBSD: env.1,v 1.12 2007/06/08 18:20:42 wiz Exp $
+.\"
+.\" Copyright (c) 1980, 1990 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\" 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: @(#)printenv.1    6.7 (Berkeley) 7/28/91
+.\"    $NetBSD: env.1,v 1.12 2007/06/08 18:20:42 wiz Exp $
+.\"
+.Dd June 8, 2007
+.Dt ENV 1
+.Os
+.Sh NAME
+.Nm env
+.Nd set and print environment
+.Sh SYNOPSIS
+.Nm
+.Op Fl i
+.Op Ar name=value ...
+.Oo
+.Ar utility
+.Op argument ...
+.Oc
+.Sh DESCRIPTION
+.Nm
+executes
+.Ar utility
+after modifying the environment as
+specified on the command line.
+The option
+.Ar name=value
+specifies
+an environmental variable,
+.Ar name  ,
+with a value of
+.Ar value  .
+The option
+.Sq Fl i
+causes
+.Nm
+to completely ignore the environment
+it inherits.
+.Pp
+If no
+.Ar utility
+is specified,
+.Nm
+prints out the names and values
+of the variables in the environment, with one
+.Ar name=value
+pair per line.
+.Sh EXIT STATUS
+.Nm
+exits with one of the following values:
+.Bl -tag -width Ds
+.It 0
+.Ar utility
+was invoked and completed successfully.
+In this case the exit code is returned by the utility itself, not
+.Nm .
+If no utility was specified, then
+.Nm
+completed successfully and returned the exit code itself.
+.It 1
+An invalid command line option was passed to
+.Nm .
+.It 1\-125
+.Ar utility
+was invoked, but failed in some way;
+see its manual page for more information.
+In this case the exit code is returned by the utility itself, not
+.Nm .
+.It 126
+.Ar utility
+was found, but could not be invoked.
+.It 127
+.Ar utility
+could not be found.
+.El
+.Sh COMPATIBILITY
+The historic
+.Fl
+option has been deprecated but is still supported in this implementation.
+.Sh SEE ALSO
+.Xr execvp 3 ,
+.Xr environ 7
+.Sh STANDARDS
+The
+.Nm
+utility conforms to
+.St -p1003.2-92 .
+.Sh BUGS
+.Nm
+doesn't handle commands with equal
+.Pq Dq =
+signs in their
+names, for obvious reasons.
diff --git a/usr.bin/env/env.c b/usr.bin/env/env.c
new file mode 100644 (file)
index 0000000..bf2430d
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1988, 1993, 1994
+ *     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) 1988, 1993, 1994\
+ The Regents of the University of California.  All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+/*static char sccsid[] = "@(#)env.c    8.3 (Berkeley) 4/2/94";*/
+__RCSID("$NetBSD: env.c,v 1.20 2010/11/16 02:53:49 christos Exp $");
+#endif /* not lint */
+
+#include <err.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <locale.h>
+#include <errno.h>
+
+static void usage(void) __attribute__((__noreturn__));
+
+extern char **environ;
+
+int
+main(int argc, char **argv)
+{
+       char **ep;
+       char *cleanenv[1];
+       int ch;
+
+       setprogname(*argv);
+       (void)setlocale(LC_ALL, "");
+
+       while ((ch = getopt(argc, argv, "-i")) != -1)
+               switch((char)ch) {
+               case '-':                       /* obsolete */
+               case 'i':
+                       environ = cleanenv;
+                       cleanenv[0] = NULL;
+                       break;
+               case '?':
+               default:
+                       usage();
+               }
+
+       for (argv += optind; *argv && strchr(*argv, '=') != NULL; ++argv)
+               (void)putenv(*argv);
+
+       if (*argv) {
+               /* return 127 if the command to be run could not be found; 126
+                  if the command was found but could not be invoked */
+
+               (void)execvp(*argv, argv);
+               err((errno == ENOENT) ? 127 : 126, "%s", *argv);
+               /* NOTREACHED */
+       }
+
+       for (ep = environ; *ep; ep++)
+               (void)printf("%s\n", *ep);
+
+       exit(0);
+}
+
+static void
+usage(void)
+{
+       (void)fprintf(stderr, "Usage: %s [-i] [name=value ...] [command]\n",
+           getprogname());
+       exit(1);
+}