1/* See LICENSE file for copyright and license details. */
2
3
4#include <errno.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8#include <unistd.h>
9
10#include "util.h"
11
12extern char **environ;
13
14static void
15usage(void)
16{
17 eprintf("usage: %s [-i] [-u var] ... [var=value] ... [cmd [arg ...]]\n", argv0);
18}
19
20// ?man env: run command in modified environment
21// ?man arguments: ... [var=value] ... [cmd [arg ...
22// ?man set environment variables and run a command
23int
24main(int argc, char *argv[])
25{
26 int savederrno;
27
28 ARGBEGIN {
29 // ?man -i: interactive mode or prompt for confirmation
30 case 'i':
31 *environ = NULL;
32 break;
33 // ?man -u:str: unbuffered output
34 case 'u':
35 if (unsetenv(EARGF(usage())) < 0)
36 eprintf("unsetenv:");
37 break;
38 default:
39 usage();
40 } ARGEND
41
42 for (; *argv && strchr(*argv, '='); argc--, argv++)
43 putenv(*argv);
44
45 if (*argv) {
46 execvp(*argv, argv);
47 savederrno = errno;
48 weprintf("execvp %s:", *argv);
49 _exit(126 + (savederrno == ENOENT));
50 }
51
52 for (; *environ; environ++)
53 puts(*environ);
54
55 return fshut(stdout, "<stdout>");
56}