From: Jason McIntyre Subject: Re: env: -u name To: tech@openbsd.org Date: Sun, 28 Jul 2024 06:33:24 +0100 On Sat, Jul 27, 2024 at 07:40:12PM +0000, Klemens Nanni wrote: > -u name > Remove name from the environment. > > to hide some env var without involving sh -c 'unset A; ...' > > $ env -i A=1 B=2 ./obj/env -u A > B=2 > > Trivial addition, I just don't understand why we return 126 on setenv(3) failure. > > I'd return 1 in both un/setenv(3) failure cases, but that's not a hill I'd like > to die on, so diff below keeps -u failure's exit value consistent. > > FreeBSD and GNU env(1) also have -u, the latter returning 125 on setenv failure. > With -u in base, I can ditch genv(1) from our sysutils/coreutils port. > > Feedback? Objection? OK? > hi. no opinion on the addition but if it does go in, can you add adjust STANDARDS to note that -u is an extension (you can lift the text from mv(1)). jmc > > Index: env.1 > =================================================================== > RCS file: /cvs/src/usr.bin/env/env.1,v > diff -u -p -r1.20 env.1 > --- env.1 12 Jan 2015 21:42:53 -0000 1.20 > +++ env.1 27 Jul 2024 19:32:55 -0000 > @@ -39,6 +39,7 @@ > .Sh SYNOPSIS > .Nm env > .Op Fl i > +.Op Fl u Ar name > .Oo > .Ar name Ns = Ns Ar value ... > .Oc > @@ -66,6 +67,10 @@ The options are as follows: > Causes > .Nm > to completely ignore the environment it inherits. > +.It Fl u Ar name > +Remove > +.Ar name > +from the environment. > .El > .Pp > If no > Index: env.c > =================================================================== > RCS file: /cvs/src/usr.bin/env/env.c,v > diff -u -p -r1.17 env.c > --- env.c 28 Oct 2016 07:22:59 -0000 1.17 > +++ env.c 27 Jul 2024 19:33:25 -0000 > @@ -49,13 +49,17 @@ main(int argc, char *argv[]) > if (pledge("stdio exec", NULL) == -1) > err(1, "pledge"); > > - while ((ch = getopt(argc, argv, "i-")) != -1) > + while ((ch = getopt(argc, argv, "-iu:")) != -1) > switch(ch) { > case '-': /* obsolete */ > case 'i': > if ((environ = calloc(1, sizeof(char *))) == NULL) > err(126, "calloc"); > break; > + case 'u': > + if (unsetenv(optarg) == -1) > + err(126, "unsetenv"); > + break; > default: > usage(); > } > @@ -91,7 +95,7 @@ usage(void) > { > extern char *__progname; > > - (void)fprintf(stderr, "usage: %s [-i] [name=value ...] " > + (void)fprintf(stderr, "usage: %s [-i] [-u name] [name=value ...] " > "[utility [argument ...]]\n", __progname); > exit(1); > } >