• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* env.c - Set the environment for command invocation.
2  *
3  * Copyright 2012 Tryn Mirell <tryn@mirell.org>
4  *
5  * http://opengroup.org/onlinepubs/9699919799/utilities/env.html
6 
7 USE_ENV(NEWTOY(env, "^iu*", TOYFLAG_USR|TOYFLAG_BIN))
8 
9 config ENV
10   bool "env"
11   default y
12   help
13     usage: env [-i] [-u NAME] [NAME=VALUE...] [command [option...]]
14 
15     Set the environment for command invocation.
16 
17     -i	Clear existing environment.
18     -u NAME	Remove NAME from the environment
19 */
20 
21 #define FOR_env
22 #include "toys.h"
23 
24 GLOBALS(
25   struct arg_list *u;
26 );
27 
28 extern char **environ;
29 
env_main(void)30 void env_main(void)
31 {
32   char **ev;
33 
34   if (toys.optflags & FLAG_i) clearenv();
35   while (TT.u) {
36     unsetenv(TT.u->arg);
37     TT.u = TT.u->next;
38   }
39 
40   for (ev = toys.optargs; *ev; ev++) {
41     char *name = *ev, *val = strchr(name, '=');
42 
43     if (val) {
44       *(val++) = 0;
45       setenv(name, val, 1);
46     } else xexec(ev);
47   }
48 
49   if (environ) for (ev = environ; *ev; ev++) xputs(*ev);
50 }
51