Implement -E eofstr for xargs(1)
This commit is contained in:
parent
7a5369ae04
commit
e27c55aec3
7
xargs.1
7
xargs.1
@ -4,8 +4,10 @@ xargs \- constuct argument list(s) and execute command
|
||||
.SH SYNOPSIS
|
||||
.B xargs
|
||||
.RB [ \-r ]
|
||||
.RB [ \-E
|
||||
.IR eofstr ]
|
||||
.RI [ cmd
|
||||
.RI [arg... ] ]
|
||||
.IR [arg... ] ]
|
||||
.SH DESCRIPTION
|
||||
xargs reads space, tab, newline and EOF delimited strings from stdin
|
||||
and executes the specified cmd with the strings as arguments.
|
||||
@ -26,6 +28,9 @@ newlines, may be escaped by a backslash.
|
||||
.BI \-r
|
||||
Do not run the command if there are no arguments. Normally the command is
|
||||
executed at least once even if there are no arguments.
|
||||
.TP
|
||||
.B \-E eofstr
|
||||
Use eofstr as a logical EOF marker.
|
||||
.SH EXIT STATUS
|
||||
xargs exits with one of the following values:
|
||||
|
||||
|
12
xargs.c
12
xargs.c
@ -27,12 +27,13 @@ static char *argb;
|
||||
static size_t argbsz = 1;
|
||||
static size_t argbpos;
|
||||
static int nerrors = 0;
|
||||
static char *eofstr;
|
||||
static int rflag = 0;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
eprintf("usage: %s [-r] [cmd [arg...]]\n", argv0);
|
||||
eprintf("usage: %s [-r] [-E eofstr] [cmd [arg...]]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
@ -46,6 +47,9 @@ main(int argc, char *argv[])
|
||||
case 'r':
|
||||
rflag = 1;
|
||||
break;
|
||||
case 'E':
|
||||
eofstr = EARGF(usage());
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
} ARGEND;
|
||||
@ -186,9 +190,8 @@ poparg(void)
|
||||
while ((ch = inputc()) != EOF) {
|
||||
switch (ch) {
|
||||
case ' ': case '\t': case '\n':
|
||||
fillbuf('\0');
|
||||
deinputc(ch);
|
||||
return argb;
|
||||
goto out;
|
||||
case '\'':
|
||||
if (parsequote('\'') == -1)
|
||||
enprintf(EXIT_FAILURE,
|
||||
@ -209,8 +212,11 @@ poparg(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
out:
|
||||
if (argbpos > 0) {
|
||||
fillbuf('\0');
|
||||
if (eofstr && strcmp(argb, eofstr) == 0)
|
||||
return NULL;
|
||||
return argb;
|
||||
}
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user