xref: /original-bsd/usr.bin/env/env.c (revision 5fd6b0d9)
1 /*
2  * Copyright (c) 1988 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 char copyright[] =
20 "@(#) Copyright (c) 1988 The Regents of the University of California.\n\
21  All rights reserved.\n";
22 #endif /* not lint */
23 
24 #ifndef lint
25 static char sccsid[] = "@(#)env.c	5.1 (Berkeley) 09/27/88";
26 #endif /* not lint */
27 
28 #include <stdio.h>
29 #include <strings.h>
30 
31 main(argc, argv)
32 	int argc;
33 	char **argv;
34 {
35 	extern char **environ;
36 	extern int errno, optind;
37 	register char **ep, *p;
38 	char *cleanenv[1];
39 	int ch;
40 
41 	while ((ch = getopt(argc, argv, "-")) != EOF)
42 		switch((char)ch) {
43 		case '-':
44 			environ = cleanenv;
45 			cleanenv[0] = NULL;
46 			break;
47 		case '?':
48 		default:
49 			(void)fprintf(stderr,
50 			    "usage: env [-] [name=value ...] [command]\n");
51 			exit(1);
52 		}
53 	for (argv += optind; *argv && (p = index(*argv, '=')); ++argv)
54 		(void)setenv(*argv, ++p, 1);
55 	if (*argv) {
56 		execvp(*argv, argv);
57 		(void)fprintf(stderr, "env: %s: %s\n", *argv,
58 		    strerror(errno));
59 		exit(1);
60 	}
61 	for (ep = environ; *ep; ep++)
62 		(void)printf("%s\n", *ep);
63 	exit(0);
64 }
65