diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-10 17:17:41 +0100 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-10 17:17:41 +0100 |
commit | 6b6e018595d005cc39a31251831db804fd974d9a (patch) | |
tree | af2f7056e4ba8c4a7dc106bad4027a7d353a2411 | |
parent | 1575f68ee189304c8a158786e979f5e5cde3a20a (diff) | |
download | xe-6b6e018595d005cc39a31251831db804fd974d9a.tar.gz xe-6b6e018595d005cc39a31251831db804fd974d9a.tar.xz xe-6b6e018595d005cc39a31251831db804fd974d9a.zip |
-v prints commands to stderr
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | xe.c | 19 |
2 files changed, 12 insertions, 9 deletions
diff --git a/README.md b/README.md index f876629..6710479 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Over apply: * `-R`: return with status 122 when no arguments have been passed. * `-k`: keep going: don't stop when a command failed to execute. * `-n`: don't run the commands, just print them. -* `-v`: print commands before running them. +* `-v`: print commands to standard error before running them. * `-I`: replace occurences of *arg* with the argument (default: `{}`). * `-N`: pass upto *maxargs* arguments to each COMMAND (default: 1). `-N0` will pass as many arguments as possible. diff --git a/xe.c b/xe.c index 42ca3b9..af6495a 100644 --- a/xe.c +++ b/xe.c @@ -30,6 +30,7 @@ static int maxjobs = 1; static int runjobs = 0; static int Rflag, Aflag, aflag, kflag, nflag, vflag; static long iterations = 0; +static FILE *traceout; static size_t argmax; static int push_overflowed; @@ -108,17 +109,17 @@ shquote(const char *s) "\021\022\023\024\025\026\027\030" "\031\032\033\034\035\036\037\040" "`^#*[]=|\\?${}()'\"<>&;\127")) { - printf("%s", s); + fprintf(traceout, "%s", s); return; } - putchar('\''); + fprintf(traceout, "\'"); for (; *s; s++) if (*s == '\'') - printf("'\\''"); + fprintf(traceout, "'\\''"); else - putchar(*s); - putchar('\''); + fprintf(traceout, "%c", *s); + fprintf(traceout, "\'"); } static int @@ -128,10 +129,10 @@ trace() for (i = 0; i < argslen; i++) { if (i > 0) - printf(" "); + fprintf(traceout, " "); shquote(args[i]); } - printf("\n"); + fprintf(traceout, "\n"); return 0; } @@ -244,6 +245,8 @@ main(int argc, char *argv[]) if (argmax <= 0) argmax = _POSIX_ARG_MAX; + traceout = stdout; + while ((c = getopt(argc, argv, "+0A:I:N:Raj:kns:v")) != -1) switch(c) { case '0': delim = '\0'; break; @@ -256,7 +259,7 @@ main(int argc, char *argv[]) case 'k': kflag++; break; case 'n': nflag++; break; case 's': sflag = optarg; break; - case 'v': vflag++; break; + case 'v': vflag++; traceout = stderr; break; default: fprintf(stderr, "Usage: %s [-0Rknv] [-I arg] [-N maxargs] [-j maxjobs] COMMAND...\n" |