1/* See LICENSE file for copyright and license details. */
2
3#include <errno.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7#include <unistd.h>
8
9#include "util.h"
10#include "wexec.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 {
30 // ?man -i: interactive mode or prompt for confirmation
31 case 'i':
32 *environ = NULL;
33 break;
34 // ?man -u:str: unbuffered output
35 case 'u':
36 if (unsetenv(EARGF(usage())) < 0)
37 eprintf("unsetenv:");
38 break;
39 default:
40 usage();
41 }
42 ARGEND
43
44 for (; *argv && strchr(*argv, '='); argc--, argv++)
45 putenv(*argv);
46
47 if (*argv) {
48 wexecvp_self(*argv, argv);
49 savederrno = errno;
50 weprintf("wexecvp %s:", *argv);
51 _exit(126 + (savederrno == ENOENT));
52 }
53
54 for (; *environ; environ++)
55 puts(*environ);
56
57 return fshut(stdout, "<stdout>");
58}