diff options
author | izabera <izaberina@gmail.com> | 2016-02-10 01:26:01 +0100 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2016-02-10 11:38:51 -0600 |
commit | 1e77f70a1d94a345892ddf88f9e46de1c5c91a48 (patch) | |
tree | 6676a8573615bd19f05f9303bc99313334febec1 | |
parent | 2f3f26ea1ec581cd24a0778323eb0844f03fd6a3 (diff) | |
download | toybox-1e77f70a1d94a345892ddf88f9e46de1c5c91a48.tar.gz |
implement env -u
-rw-r--r-- | toys/posix/env.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/toys/posix/env.c b/toys/posix/env.c index 87c25a01..c2fc5cf3 100644 --- a/toys/posix/env.c +++ b/toys/posix/env.c @@ -4,36 +4,45 @@ * * http://opengroup.org/onlinepubs/9699919799/utilities/env.html -USE_ENV(NEWTOY(env, "^i", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ENV(NEWTOY(env, "^iu*", TOYFLAG_USR|TOYFLAG_BIN)) config ENV bool "env" default y help - usage: env [-i] [NAME=VALUE...] [command [option...]] + usage: env [-i] [-u NAME] [NAME=VALUE...] [command [option...]] Set the environment for command invocation. -i Clear existing environment. + -u NAME Remove NAME from the environment */ +#define FOR_env #include "toys.h" +GLOBALS( + struct arg_list *u; +); + extern char **environ; void env_main(void) { char **ev; - if (toys.optflags) clearenv(); + if (toys.optflags & FLAG_i) clearenv(); + while (TT.u) { + unsetenv(TT.u->arg); + TT.u = TT.u->next; + } for (ev = toys.optargs; *ev; ev++) { char *name = *ev, *val = strchr(name, '='); if (val) { *(val++) = 0; - if (*val) setenv(name, val, 1); - else unsetenv(name); + setenv(name, val, 1); } else xexec(ev); } |