Add a '-v' option to `env', to make it easier to discover exactly what steps

it is doing, and what order it does them.  This will be much more useful as
more options are added.

Approved by:	re (blanket `env')
This commit is contained in:
gad 2005-06-20 03:06:54 +00:00
parent d96c7ef573
commit cd436d6b80

29
usr.bin/env/env.c vendored
View File

@ -55,29 +55,50 @@ __FBSDID("$FreeBSD$");
extern char **environ;
int env_verbosity;
static void usage(void);
int
main(int argc, char **argv)
{
char **ep, *p;
char **ep, *p, **parg;
char *cleanenv[1];
int ch;
while ((ch = getopt(argc, argv, "-i")) != -1)
while ((ch = getopt(argc, argv, "-iv")) != -1)
switch(ch) {
case '-':
case 'i':
environ = cleanenv;
cleanenv[0] = NULL;
if (env_verbosity)
fprintf(stderr, "#env clearing environ\n");
break;
case 'v':
env_verbosity++;
if (env_verbosity > 1)
fprintf(stderr, "#env verbosity now at %d\n",
env_verbosity);
break;
case '?':
default:
usage();
}
for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv)
for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) {
if (env_verbosity)
fprintf(stderr, "#env setenv:\t%s\n", *argv);
(void)setenv(*argv, ++p, 1);
}
if (*argv) {
if (env_verbosity) {
fprintf(stderr, "#env executing:\t%s\n", *argv);
for (parg = argv, argc = 0; *parg; parg++, argc++)
fprintf(stderr, "#env arg[%d]=\t'%s'\n",
argc, *parg);
if (env_verbosity > 1)
sleep(1);
}
execvp(*argv, argv);
err(errno == ENOENT ? 127 : 126, "%s", *argv);
}
@ -90,6 +111,6 @@ static void
usage(void)
{
(void)fprintf(stderr,
"usage: env [-i] [name=value ...] [utility [argument ...]]\n");
"usage: env [-iv] [name=value ...] [utility [argument ...]]\n");
exit(1);
}