diff options
Diffstat (limited to 'man-pages-posix-2013/man1p/xargs.1p')
-rw-r--r-- | man-pages-posix-2013/man1p/xargs.1p | 749 |
1 files changed, 749 insertions, 0 deletions
diff --git a/man-pages-posix-2013/man1p/xargs.1p b/man-pages-posix-2013/man1p/xargs.1p new file mode 100644 index 0000000..507e93d --- /dev/null +++ b/man-pages-posix-2013/man1p/xargs.1p @@ -0,0 +1,749 @@ +'\" et +.TH XARGS "1P" 2013 "IEEE/The Open Group" "POSIX Programmer's Manual" +.SH PROLOG +This manual page is part of the POSIX Programmer's Manual. +The Linux implementation of this interface may differ (consult +the corresponding Linux manual page for details of Linux behavior), +or the interface may not be implemented on Linux. + +.SH NAME +xargs +\(em construct argument lists and invoke utility +.SH SYNOPSIS +.LP +.nf +xargs \fB[\fR\(miptx\fB] [\fR\(miE \fIeofstr\fB] [\fR\(miI \fIreplstr\fR|\(miL \fInumber\fR|\(min \fInumber\fB]\fR + \fB[\fR\(mis \fIsize\fB] [\fIutility \fB[\fIargument\fR...\fB]]\fR +.fi +.SH DESCRIPTION +The +.IR xargs +utility shall construct a command line consisting of the +.IR utility +and +.IR argument +operands specified followed by as many arguments read in sequence from +standard input as fit in length and number constraints specified by the +options. The +.IR xargs +utility shall then invoke the constructed command line and wait for its +completion. This sequence shall be repeated until one of the following +occurs: +.IP " *" 4 +An end-of-file condition is detected on standard input. +.IP " *" 4 +An argument consisting of just the logical end-of-file string +(see the +.BR \(miE +.IR eofstr +option) is found on standard input after double-quote processing, +<apostrophe> +processing, and +<backslash>-escape +processing (see next paragraph). All arguments up to but not including +the argument consisting of just the logical end-of-file string shall be +used as arguments in constructed command lines. +.IP " *" 4 +An invocation of a constructed command line returns an exit status of +255. +.P +The application shall ensure that arguments in the standard input are +separated by unquoted +<blank> +characters, unescaped +<blank> +characters, or +<newline> +characters. A string of zero or more non-double-quote (\c +.BR '\&"' ) +characters and non-\c +<newline> +characters can be quoted by enclosing them in double-quotes. A string +of zero or more non-\c +<apostrophe> +(\c +.BR '\e'' ) +characters and non-\c +<newline> +characters can be quoted by enclosing them in +<apostrophe> +characters. Any unquoted character can be escaped by preceding it with a +<backslash>. +The utility named by +.IR utility +shall be executed one or more times until the end-of-file is reached or +the logical end-of file string is found. The results are unspecified if +the utility named by +.IR utility +attempts to read from its standard input. +.P +The generated command line length shall be the sum of the size in bytes +of the utility name and each argument treated as strings, including a +null byte terminator for each of these strings. The +.IR xargs +utility shall limit the command line length such that when the command +line is invoked, the combined argument and environment lists (see the +.IR exec +family of functions in the System Interfaces volume of POSIX.1\(hy2008) shall not exceed +{ARG_MAX}\(mi2\|048 +bytes. Within this constraint, if neither the +.BR \(min +nor the +.BR \(mis +option is specified, the default command line length shall be at least +{LINE_MAX}. +.SH OPTIONS +The +.IR xargs +utility shall conform to the Base Definitions volume of POSIX.1\(hy2008, +.IR "Section 12.2" ", " "Utility Syntax Guidelines". +.P +The following options shall be supported: +.IP "\fB\(miE\ \fIeofstr\fR" 10 +Use +.IR eofstr +as the logical end-of-file string. If +.BR \(miE +is not specified, it is unspecified whether the logical end-of-file +string is the +<underscore> +character (\c +.BR '_' ) +or the end-of-file string capability is disabled. When +.IR eofstr +is the null string, the logical end-of-file string capability shall be +disabled and +<underscore> +characters shall be taken literally. +.IP "\fB\(miI\ \fIreplstr\fR" 10 +Insert mode: +.IR utility +is executed for each logical line from standard input. Arguments in the +standard input shall be separated only by unescaped +<newline> +characters, not by +<blank> +characters. Any unquoted unescaped +<blank> +characters at the beginning of each line shall be ignored. The resulting +argument shall be inserted in +.IR arguments +in place of each occurrence of +.IR replstr . +At least five arguments in +.IR arguments +can each contain one or more instances of +.IR replstr . +Each of these constructed arguments cannot grow larger than an +implementation-defined limit greater than or equal to 255 bytes. Option +.BR \(mix +shall be forced on. +.IP "\fB\(miL\ \fInumber\fR" 10 +The +.IR utility +shall be executed for each non-empty +.IR number +lines of arguments from standard input. The last invocation of +.IR utility +shall be with fewer lines of arguments if fewer than +.IR number +remain. A line is considered to end with the first +<newline> +unless the last character of the line is a +<blank>; +a trailing +<blank> +signals continuation to the next non-empty line, inclusive. +.IP "\fB\(min\ \fInumber\fR" 10 +Invoke +.IR utility +using as many standard input arguments as possible, up to +.IR number +(a positive decimal integer) arguments maximum. Fewer arguments shall +be used if: +.RS 10 +.IP " *" 4 +The command line length accumulated exceeds the size specified by the +.BR \(mis +option (or +{LINE_MAX} +if there is no +.BR \(mis +option). +.IP " *" 4 +The last iteration has fewer than +.IR number , +but not zero, operands remaining. +.RE +.IP "\fB\(mip\fP" 10 +Prompt mode: the user is asked whether to execute +.IR utility +at each invocation. Trace mode (\c +.BR \(mit ) +is turned on to write the command instance to be executed, followed by +a prompt to standard error. An affirmative response read from +.BR /dev/tty +shall execute the command; otherwise, that particular invocation of +.IR utility +shall be skipped. +.IP "\fB\(mis\ \fIsize\fR" 10 +Invoke +.IR utility +using as many standard input arguments as possible yielding a command +line length less than +.IR size +(a positive decimal integer) bytes. Fewer arguments shall be used if: +.RS 10 +.IP " *" 4 +The total number of arguments exceeds that specified by the +.BR \(min +option. +.IP " *" 4 +The total number of lines exceeds that specified by the +.BR \(miL +option. +.IP " *" 4 +End-of-file is encountered on standard input before +.IR size +bytes are accumulated. +.P +Values of +.IR size +up to at least +{LINE_MAX} +bytes shall be supported, provided that the constraints specified in +the DESCRIPTION are met. It shall not be considered an error if a +value larger than that supported by the implementation or exceeding the +constraints specified in the DESCRIPTION is given; +.IR xargs +shall use the largest value it supports within the constraints. +.RE +.IP "\fB\(mit\fP" 10 +Enable trace mode. Each generated command line shall be written to +standard error just prior to invocation. +.IP "\fB\(mix\fP" 10 +Terminate if a constructed command line will not fit in the +implied or specified size (see the +.BR \(mis +option above). +.SH OPERANDS +The following operands shall be supported: +.IP "\fIutility\fR" 10 +The name of the utility to be invoked, found by search path using the +.IR PATH +environment variable, described in the Base Definitions volume of POSIX.1\(hy2008, +.IR "Chapter 8" ", " "Environment Variables". +If +.IR utility +is omitted, the default shall be the +.IR echo +utility. If the +.IR utility +operand names any of the special built-in utilities in +.IR "Section 2.14" ", " "Special Built-In Utilities", +the results are undefined. +.IP "\fIargument\fR" 10 +An initial option or operand for the invocation of +.IR utility . +.SH STDIN +The standard input shall be a text file. The results are unspecified if +an end-of-file condition is detected immediately following an escaped +<newline>. +.SH "INPUT FILES" +The file +.BR /dev/tty +shall be used to read responses required by the +.BR \(mip +option. +.SH "ENVIRONMENT VARIABLES" +The following environment variables shall affect the execution of +.IR xargs : +.IP "\fILANG\fP" 10 +Provide a default value for the internationalization variables that are +unset or null. (See the Base Definitions volume of POSIX.1\(hy2008, +.IR "Section 8.2" ", " "Internationalization Variables" +for the precedence of internationalization variables used to determine +the values of locale categories.) +.IP "\fILC_ALL\fP" 10 +If set to a non-empty string value, override the values of all the +other internationalization variables. +.IP "\fILC_COLLATE\fP" 10 +.br +Determine the locale for the behavior of ranges, equivalence classes, +and multi-character collating elements used in the extended regular +expression defined for the +.BR yesexpr +locale keyword in the +.IR LC_MESSAGES +category. +.IP "\fILC_CTYPE\fP" 10 +Determine the locale for the interpretation of sequences of bytes of +text data as characters (for example, single-byte as opposed to +multi-byte characters in arguments and input files) and the behavior of +character classes used in the extended regular expression defined for +the +.BR yesexpr +locale keyword in the +.IR LC_MESSAGES +category. +.IP "\fILC_MESSAGES\fP" 10 +.br +Determine the locale used to process affirmative responses, and the +locale used to affect the format and contents of diagnostic messages +and prompts written to standard error. +.IP "\fINLSPATH\fP" 10 +Determine the location of message catalogs for the processing of +.IR LC_MESSAGES . +.IP "\fIPATH\fP" 10 +Determine the location of +.IR utility , +as described in the Base Definitions volume of POSIX.1\(hy2008, +.IR "Chapter 8" ", " "Environment Variables". +.SH "ASYNCHRONOUS EVENTS" +Default. +.SH STDOUT +Not used. +.SH STDERR +The standard error shall be used for diagnostic messages and the +.BR \(mit +and +.BR \(mip +options. If the +.BR \(mit +option is specified, the +.IR utility +and its constructed argument list shall be written to standard error, +as it will be invoked, prior to invocation. If +.BR \(mip +is specified, a prompt of the following format shall be written (in the +POSIX locale): +.sp +.RS 4 +.nf +\fB +"?..." +.fi \fR +.P +.RE +.P +at the end of the line of the output from +.BR \(mit . +.SH "OUTPUT FILES" +None. +.SH "EXTENDED DESCRIPTION" +None. +.SH "EXIT STATUS" +The following exit values shall be returned: +.IP "\0\0\0\00" 8 +All invocations of +.IR utility +returned exit status zero. +.IP "1\(hy125" 8 +A command line meeting the specified requirements could not be +assembled, one or more of the invocations of +.IR utility +returned a non-zero exit status, or some other error occurred. +.IP "\0\0126" 8 +The utility specified by +.IR utility +was found but could not be invoked. +.IP "\0\0127" 8 +The utility specified by +.IR utility +could not be found. +.SH "CONSEQUENCES OF ERRORS" +If a command line meeting the specified requirements cannot be +assembled, the utility cannot be invoked, an invocation of the utility +is terminated by a signal, or an invocation of the utility exits with +exit status 255, the +.IR xargs +utility shall write a diagnostic message and exit without processing +any remaining input. +.LP +.IR "The following sections are informative." +.SH "APPLICATION USAGE" +The 255 exit status allows a utility being used by +.IR xargs +to tell +.IR xargs +to terminate if it knows no further invocations using the current data +stream will succeed. Thus, +.IR utility +should explicitly +.IR exit +with an appropriate value to avoid accidentally returning with 255. +.P +Note that since input is parsed as lines, +<blank> +characters separate arguments, and +<backslash>, +<apostrophe>, +and double-quote characters are used for quoting, if +.IR xargs +is used to bundle the output of commands like +.IR find +.IR dir +.BR \(miprint +or +.IR ls +into commands to be executed, unexpected results are likely if any +filenames contain +<blank>, +<newline>, +or quoting characters. This can be solved by using find to call a script +that converts each file found into a quoted string that is then piped to +.IR xargs , +but in most cases it is preferable just to have +.IR find +do the argument aggregation itself by using +.BR \(miexec +with a +.BR '+' +terminator instead of +.BR ';' . +Note that the quoting rules used by +.IR xargs +are not the same as in the shell. They were not made consistent here +because existing applications depend on the current rules. An easy (but +inefficient) method that can be used to transform input consisting of +one argument per line into a quoted form that +.IR xargs +interprets correctly is to precede each non-\c +<newline> +character with a +<backslash>. +More efficient alternatives are shown in Example 2 and Example 5 below. +.P +On implementations with a large value for +{ARG_MAX}, +.IR xargs +may produce command lines longer than +{LINE_MAX}. +For invocation of utilities, this is not a problem. If +.IR xargs +is being used to create a text file, users should explicitly set the +maximum command line length with the +.BR \(mis +option. +.P +The +.IR command , +.IR env , +.IR nice , +.IR nohup , +.IR time , +and +.IR xargs +utilities have been specified to use exit code 127 if an error occurs +so that applications can distinguish ``failure to find a utility'' from +``invoked utility exited with an error indication''. The value 127 was +chosen because it is not commonly used for other meanings; most +utilities use small values for ``normal error conditions'' and the +values above 128 can be confused with termination due to receipt of a +signal. The value 126 was chosen in a similar manner to indicate that +the utility could be found, but not invoked. Some scripts produce +meaningful error messages differentiating the 126 and 127 cases. The +distinction between exit codes 126 and 127 is based on KornShell +practice that uses 127 when all attempts to +.IR exec +the utility fail with +.BR [ENOENT] , +and uses 126 when any attempt to +.IR exec +the utility fails for any other reason. +.SH EXAMPLES +.IP " 1." 4 +The following command combines the output of the parenthesized +commands (minus the +<apostrophe> +characters) onto one line, which is then appended to the file log. It +assumes that the expansion of +.BR \(dq$0 $*\(dq +does not include any +<apostrophe> +or +<newline> +characters. +.RS 4 +.sp +.RS 4 +.nf +\fB +(logname; date; printf "'%s'\en$0 $*") | xargs \(miE "" >>log +.fi \fR +.P +.RE +.RE +.IP " 2." 4 +The following command invokes +.IR diff +with successive pairs of arguments originally typed as command line +arguments. It assumes there are no embedded +<newline> +characters in the elements of the original argument list. +.RS 4 +.sp +.RS 4 +.nf +\fB +printf "%s\en$@" | sed 's/[^[:alnum:]]/\e\e&/g' | + xargs \(miE "" \(min 2 \(mix diff +.fi \fR +.P +.RE +.RE +.IP " 3." 4 +In the following commands, the user is asked which files in the current +directory (excluding dotfiles) are to be archived. The files are +archived into +.BR arch ; +.IR a , +one at a time or +.IR b , +many at a time. The commands assume that no filenames contain +<blank>, +<newline>, +<backslash>, +<apostrophe>, +or double-quote characters. +.RS 4 +.sp +.RS 4 +.nf +\fB +a. ls | xargs \(miE "" \(mip \(miL 1 ar \(mir arch +.P +b. ls | xargs \(miE "" \(mip \(miL 1 | xargs \(miE "" ar \(mir arch +.fi \fR +.P +.RE +.RE +.IP " 4." 4 +The following command invokes +.IR command1 +one or more times with multiple arguments, stopping if an invocation of +.IR command1 +has a non-zero exit status. +.RS 4 +.sp +.RS 4 +.nf +\fB +xargs \(miE "" sh \(mic 'command1 "$@" || exit 255' sh < xargs_input +.fi \fR +.P +.RE +.RE +.IP " 5." 4 +On XSI-conformant systems, the following command moves all files +from directory +.BR $1 +to directory +.BR $2 , +and echoes each move command just before doing it. It assumes no +filenames contain +<newline> +characters and that neither +.BR $1 +nor +.BR $2 +contains the sequence +.BR \(dq{}\(dq . +.RS 4 +.sp +.RS 4 +.nf +\fB +ls \(miA "$1" | sed \(mie 's/"/"\e\e""/g' \(mie 's/.*/"&"/' | + xargs \(miE "" \(miI {} \(mit mv "$1"/{} "$2"/{} +.fi \fR +.P +.RE +.RE +.SH RATIONALE +The +.IR xargs +utility was usually found only in System V-based systems; BSD systems +included an +.IR apply +utility that provided functionality similar to +.IR xargs +.BR \(min +.IR number . +The SVID lists +.IR xargs +as a software development extension. This volume of POSIX.1\(hy2008 does not share the view that +it is used only for development, and therefore it is not optional. +.P +The classic application of the +.IR xargs +utility is in conjunction with the +.IR find +utility to reduce the number of processes launched by a simplistic use +of the +.IR find +.BR \(miexec +combination. The +.IR xargs +utility is also used to enforce an upper limit on memory required to +launch a process. With this basis in mind, this volume of POSIX.1\(hy2008 selected only the +minimal features required. +.P +Although the 255 exit status is mostly an accident of historical +implementations, it allows a utility being used by +.IR xargs +to tell +.IR xargs +to terminate if it knows no further invocations using the current data +stream shall succeed. Any non-zero exit status from a utility falls +into the 1\(hy125 range when +.IR xargs +exits. There is no statement of how the various non-zero utility exit +status codes are accumulated by +.IR xargs . +The value could be the addition of all codes, their highest value, the +last one received, or a single value such as 1. Since no algorithm is +arguably better than the others, and since many of the standard +utilities say little more (portably) than ``pass/fail'', no new +algorithm was invented. +.P +Several other +.IR xargs +options were removed because simple alternatives already exist within +\&this volume of POSIX.1\(hy2008. For example, the +.BR \(mii +.IR replstr +option can be just as efficiently performed using a shell +.BR for +loop. Since +.IR xargs +calls an +.IR exec +function with each input line, the +.BR \(mii +option does not usually exploit the grouping capabilities of +.IR xargs . +.P +The requirement that +.IR xargs +never produces command lines such that invocation of +.IR utility +is within 2\|048 bytes of hitting the POSIX +.IR exec +{ARG_MAX} +limitations is intended to guarantee that the invoked utility has room +to modify its environment variables and command line arguments and +still be able to invoke another utility. Note that the minimum +{ARG_MAX} +allowed by the System Interfaces volume of POSIX.1\(hy2008 is 4\|096 bytes and the minimum +value allowed by this volume of POSIX.1\(hy2008 is 2\|048 bytes; therefore, +the 2\|048 bytes difference seems reasonable. Note, however, that +.IR xargs +may never be able to invoke a utility if the environment passed in to +.IR xargs +comes close to using +{ARG_MAX} +bytes. +.P +The version of +.IR xargs +required by this volume of POSIX.1\(hy2008 is required to wait for the completion of the invoked +command before invoking another command. This was done because +historical scripts using +.IR xargs +assumed sequential execution. Implementations wanting to provide +parallel operation of the invoked utilities are encouraged to add an +option enabling parallel invocation, but should still wait for +termination of all of the children before +.IR xargs +terminates normally. +.P +The +.BR \(mie +option was omitted from the ISO\ POSIX\(hy2:\|1993 standard in the belief that the +.IR eofstr +option-argument was recognized only when it was on a line by itself and +before quote and escape processing were performed, and that the logical +end-of-file processing was only enabled if a +.BR \(mie +option was specified. In that case, a simple +.IR sed +script could be used to duplicate the +.BR \(mie +functionality. Further investigation revealed that: +.IP " *" 4 +The logical end-of-file string was checked for after quote and escape +processing, making a +.IR sed +script that provided equivalent functionality much more difficult to +write. +.IP " *" 4 +The default was to perform logical end-of-file processing with an +<underscore> +as the logical end-of-file string. +.P +To correct this misunderstanding, the +.BR \(miE +.IR eofstr +option was adopted from the X/Open Portability Guide. Users should +note that the description of the +.BR \(miE +option matches historical documentation of the +.BR \(mie +option (which was not adopted because it did not support the Utility +Syntax Guidelines), by +saying that if +.IR eofstr +is the null string, logical end-of-file processing is disabled. +Historical implementations of +.IR xargs +actually did not disable logical end-of-file processing; they treated a +null argument found in the input as a logical end-of-file string. (A +null +.IR string +argument could be generated using single or double-quotes (\c +.BR '\^' +or +.BR \(dq\^\(dq ). +Since this behavior was not documented historically, it is considered +to be a bug. +.P +The +.BR \(miI , +.BR \(miL , +and +.BR \(min +options are mutually-exclusive. Some implementations use the last one +specified if more than one is given on a command line; other +implementations treat combinations of the options in different ways. +.SH "FUTURE DIRECTIONS" +None. +.SH "SEE ALSO" +.IR "Chapter 2" ", " "Shell Command Language", +.IR "\fIdiff\fR\^", +.IR "\fIecho\fR\^", +.IR "\fIfind\fR\^" +.P +The Base Definitions volume of POSIX.1\(hy2008, +.IR "Chapter 8" ", " "Environment Variables", +.IR "Section 12.2" ", " "Utility Syntax Guidelines" +.P +The System Interfaces volume of POSIX.1\(hy2008, +.IR "\fIexec\fR\^" +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 7, Copyright (C) 2013 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. +(This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the +event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard +is the referee document. The original Standard can be obtained online at +http://www.unix.org/online.html . + +Any typographical or formatting errors that appear +in this page are most likely +to have been introduced during the conversion of the source files to +man page format. To report such errors, see +https://www.kernel.org/doc/man-pages/reporting_bugs.html . |