summaryrefslogtreecommitdiffstats
path: root/man1p/xargs.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man1p/xargs.1p')
-rw-r--r--man1p/xargs.1p515
1 files changed, 515 insertions, 0 deletions
diff --git a/man1p/xargs.1p b/man1p/xargs.1p
new file mode 100644
index 000000000..a86964952
--- /dev/null
+++ b/man1p/xargs.1p
@@ -0,0 +1,515 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "XARGS" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" xargs
+.SH NAME
+xargs \- construct argument lists and invoke utility
+.SH SYNOPSIS
+.LP
+\fBxargs\fP
+\fB[\fP\fB-t\fP\fB][\fP\fB-p\fP\fB]][\fP\fB-E\fP \fIeofstr\fP\fB][\fP\fB-I\fP
+\fIreplstr\fP\fB][\fP\fB-L\fP \fInumber\fP\fB][\fP\fB-n\fP \fInumber\fP
+\fB[\fP\fB-x\fP\fB]]
+.br
+\fP \fB\ \ \ \ \ \ \fP \fB[\fP\fB-s\fP \fIsize\fP\fB][\fP\fIutility\fP
+\fB[\fP\fIargument\fP\fB...\fP\fB]]\fP
+.SH DESCRIPTION
+.LP
+The \fIxargs\fP utility shall construct a command line consisting
+of the \fIutility\fP and \fIargument\fP 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 \fIxargs\fP 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 " *" 3
+An end-of-file condition is detected on standard input.
+.LP
+.IP " *" 3
+The logical end-of-file string (see the \fB-E\fP \fIeofstr\fP option)
+is found on standard input after double-quote
+processing, apostrophe processing, and backslash escape processing
+(see next paragraph).
+.LP
+.IP " *" 3
+An invocation of a constructed command line returns an exit status
+of 255.
+.LP
+.LP
+The application shall ensure that arguments in the standard input
+are separated by unquoted <blank>s, unescaped
+<blank>s, or <newline>s. A string of zero or more non-double-quote
+( \fB' )'\fP characters and non- <newline>s
+can be quoted by enclosing them in double-quotes. A string of zero
+or more non-apostrophe ( \fB'"\fP ) characters and non-
+<newline>s can be quoted by enclosing them in apostrophes. Any unquoted
+character can be escaped by preceding it with a
+backslash. The utility named by \fIutility\fP 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 \fIutility\fP attempts to read from its standard
+input.
+.LP
+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 \fIxargs\fP utility shall limit the command line length
+such that when the command line is invoked, the combined argument
+and environment lists (see the \fIexec\fP family of functions in
+the System Interfaces volume of IEEE\ Std\ 1003.1-2001) shall not
+exceed {ARG_MAX}-2048 bytes. Within this constraint, if
+neither the \fB-n\fP nor the \fB-s\fP option is specified, the default
+command line length shall be at least {LINE_MAX}.
+.SH OPTIONS
+.LP
+The \fIxargs\fP utility shall conform to the Base Definitions volume
+of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines.
+.LP
+The following options shall be supported:
+.TP 7
+\fB-E\ \fP \fIeofstr\fP
+Use \fIeofstr\fP as the logical end-of-file string. If \fB-E\fP is
+not specified, it is unspecified whether the logical
+end-of-file string is the underscore character ( \fB'_'\fP ) or the
+end-of-file string capability is disabled. When
+\fIeofstr\fP is the null string, the logical end-of-file string capability
+shall be disabled and underscore characters shall be
+taken literally.
+.TP 7
+\fB-I\ \fP \fIreplstr\fP
+Insert mode: \fIutility\fP is executed for each line from standard
+input, taking the entire line as a single argument, inserting
+it in \fIargument\fPs for each occurrence of \fIreplstr\fP. A maximum
+of five arguments in \fIargument\fPs can each contain one
+or more instances of \fIreplstr\fP. Any <blank>s at the beginning
+of each line shall be ignored. Constructed arguments
+cannot grow larger than 255 bytes. Option \fB-x\fP shall be forced
+on.
+.TP 7
+\fB-L\ \fP \fInumber\fP
+The \fIutility\fP shall be executed for each non-empty \fInumber\fP
+lines of arguments from standard input. The last invocation
+of \fIutility\fP shall be with fewer lines of arguments if fewer than
+\fInumber\fP 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. The \fB-L\fP and \fB-n\fP options
+are mutually-exclusive; the last one specified shall take
+effect.
+.TP 7
+\fB-n\ \fP \fInumber\fP
+Invoke \fIutility\fP using as many standard input arguments as possible,
+up to \fInumber\fP (a positive decimal integer)
+arguments maximum. Fewer arguments shall be used if:
+.RS
+.IP " *" 3
+The command line length accumulated exceeds the size specified by
+the \fB-s\fP option (or {LINE_MAX} if there is no \fB-s\fP
+option).
+.LP
+.IP " *" 3
+The last iteration has fewer than \fInumber\fP, but not zero, operands
+remaining.
+.LP
+.RE
+.TP 7
+\fB-p\fP
+Prompt mode: the user is asked whether to execute \fIutility\fP at
+each invocation. Trace mode ( \fB-t\fP) is turned on to
+write the command instance to be executed, followed by a prompt to
+standard error. An affirmative response read from
+\fB/dev/tty\fP shall execute the command; otherwise, that particular
+invocation of \fIutility\fP shall be skipped.
+.TP 7
+\fB-s\ \fP \fIsize\fP
+Invoke \fIutility\fP using as many standard input arguments as possible
+yielding a command line length less than \fIsize\fP
+(a positive decimal integer) bytes. Fewer arguments shall be used
+if:
+.RS
+.IP " *" 3
+The total number of arguments exceeds that specified by the \fB-n\fP
+option.
+.LP
+.IP " *" 3
+The total number of lines exceeds that specified by the \fB-L\fP option.
+.LP
+.IP " *" 3
+End-of-file is encountered on standard input before \fIsize\fP bytes
+are accumulated.
+.LP
+.RE
+.LP
+Values of \fIsize\fP 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; \fIxargs\fP
+shall use the largest value it supports within the
+constraints.
+.TP 7
+\fB-t\fP
+Enable trace mode. Each generated command line shall be written to
+standard error just prior to invocation.
+.TP 7
+\fB-x\fP
+Terminate if a command line containing \fInumber\fP arguments (see
+the \fB-n\fP option above) \ or
+\fInumber\fP lines (see the \fB-L\fP option above) will not fit
+in the implied or specified size (see the \fB-s\fP option above).
+.sp
+.SH OPERANDS
+.LP
+The following operands shall be supported:
+.TP 7
+\fIutility\fP
+The name of the utility to be invoked, found by search path using
+the \fIPATH\fP environment variable, described in the Base
+Definitions volume of IEEE\ Std\ 1003.1-2001, Chapter 8, Environment
+Variables.
+If \fIutility\fP is omitted, the default shall be the \fIecho\fP utility.
+If the
+\fIutility\fP operand names any of the special built-in utilities
+in \fISpecial Built-In
+Utilities\fP , the results are undefined.
+.TP 7
+\fIargument\fP
+An initial option or operand for the invocation of \fIutility\fP.
+.sp
+.SH STDIN
+.LP
+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
+.LP
+The file \fB/dev/tty\fP shall be used to read responses required by
+the \fB-p\fP option.
+.SH ENVIRONMENT VARIABLES
+.LP
+The following environment variables shall affect the execution of
+\fIxargs\fP:
+.TP 7
+\fILANG\fP
+Provide a default value for the internationalization variables that
+are unset or null. (See the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
+for
+the precedence of internationalization variables used to determine
+the values of locale categories.)
+.TP 7
+\fILC_ALL\fP
+If set to a non-empty string value, override the values of all the
+other internationalization variables.
+.TP 7
+\fILC_COLLATE\fP
+.sp
+Determine the locale for the behavior of ranges, equivalence classes,
+and multi-character collating elements used in the extended
+regular expression defined for the \fByesexpr\fP locale keyword in
+the \fILC_MESSAGES\fP category.
+.TP 7
+\fILC_CTYPE\fP
+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 \fByesexpr\fP locale keyword in the \fILC_MESSAGES\fP
+category.
+.TP 7
+\fILC_MESSAGES\fP
+Determine the locale for the processing of affirmative responses and
+that should be used to affect the format and contents of
+diagnostic messages written to standard error.
+.TP 7
+\fINLSPATH\fP
+Determine the location of message catalogs for the processing of \fILC_MESSAGES
+\&.\fP
+.TP 7
+\fIPATH\fP
+Determine the location of \fIutility\fP, as described in the Base
+Definitions volume of IEEE\ Std\ 1003.1-2001, Chapter 8, Environment
+Variables.
+.sp
+.SH ASYNCHRONOUS EVENTS
+.LP
+Default.
+.SH STDOUT
+.LP
+Not used.
+.SH STDERR
+.LP
+The standard error shall be used for diagnostic messages and the \fB-t\fP
+and \fB-p\fP options. If the \fB-t\fP option is
+specified, the \fIutility\fP and its constructed argument list shall
+be written to standard error, as it will be invoked, prior to
+invocation. If \fB-p\fP is specified, a prompt of the following format
+shall be written (in the POSIX locale):
+.sp
+.RS
+.nf
+
+\fB"?..."
+\fP
+.fi
+.RE
+.LP
+at the end of the line of the output from \fB-t\fP.
+.SH OUTPUT FILES
+.LP
+None.
+.SH EXTENDED DESCRIPTION
+.LP
+None.
+.SH EXIT STATUS
+.LP
+The following exit values shall be returned:
+.TP 7
+\ \ \ \ 0
+All invocations of \fIutility\fP returned exit status zero.
+.TP 7
+1-125
+A command line meeting the specified requirements could not be assembled,
+one or more of the invocations of \fIutility\fP
+returned a non-zero exit status, or some other error occurred.
+.TP 7
+\ \ 126
+The utility specified by \fIutility\fP was found but could not be
+invoked.
+.TP 7
+\ \ 127
+The utility specified by \fIutility\fP could not be found.
+.sp
+.SH CONSEQUENCES OF ERRORS
+.LP
+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 \fIxargs\fP utility shall write
+a diagnostic message and exit without processing any remaining input.
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+The 255 exit status allows a utility being used by \fIxargs\fP to
+tell \fIxargs\fP to terminate if it knows no further
+invocations using the current data stream will succeed. Thus, \fIutility\fP
+should explicitly \fIexit\fP with an appropriate value to avoid accidentally
+returning with 255.
+.LP
+Note that input is parsed as lines; <blank>s separate arguments. If
+\fIxargs\fP is used to bundle output of commands like
+\fIfind\fP \fIdir\fP \fB-print\fP or \fIls\fP into
+commands to be executed, unexpected results are likely if any filenames
+contain any <blank>s or <newline>s. This can be
+fixed by using \fIfind\fP to call a script that converts each file
+found into a quoted string
+that is then piped to \fIxargs\fP. Note that the quoting rules used
+by \fIxargs\fP are not the same as in the shell. They were
+not made consistent here because existing applications depend on the
+current rules and the shell syntax is not fully compatible
+with it. An easy rule that can be used to transform any string into
+a quoted form that \fIxargs\fP interprets correctly is to
+precede each character in the string with a backslash.
+.LP
+On implementations with a large value for {ARG_MAX}, \fIxargs\fP may
+produce command lines longer than {LINE_MAX}. For
+invocation of utilities, this is not a problem. If \fIxargs\fP is
+being used to create a text file, users should explicitly set
+the maximum command line length with the \fB-s\fP option.
+.LP
+The \fIcommand\fP, \fIenv\fP, \fInice\fP, \fInohup\fP, \fItime\fP,
+and \fIxargs\fP 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
+\fIexec\fP the utility fail with [ENOENT], and uses 126 when any attempt
+to \fIexec\fP the utility fails for any other
+reason.
+.SH EXAMPLES
+.IP " 1." 4
+The following command combines the output of the parenthesised commands
+onto one line, which is then written to the end-of-file
+\fBlog\fP:
+.sp
+.RS
+.nf
+
+\fB(logname; date; printf "%s\\n" "$0 $*") | xargs >>log
+\fP
+.fi
+.RE
+.LP
+.IP " 2." 4
+The following command invokes \fIdiff\fP with successive pairs of
+arguments originally
+typed as command line arguments (assuming there are no embedded <blank>s
+in the elements of the original argument list):
+.sp
+.RS
+.nf
+
+\fBprintf "%s\\n" "$*" | xargs -n 2 -x diff
+\fP
+.fi
+.RE
+.LP
+.IP " 3." 4
+In the following commands, the user is asked which files in the current
+directory are to be archived. The files are archived
+into \fBarch\fP; \fIa\fP, one at a time, or \fIb\fP, many at a time.
+.sp
+.RS
+.nf
+
+\fBa. ls | xargs -p -L 1 ar -r arch
+.sp
+
+b. ls | xargs -p -L 1 | xargs ar -r arch
+\fP
+.fi
+.RE
+.LP
+.IP " 4." 4
+The following executes with successive pairs of arguments originally
+typed as command line arguments:
+.sp
+.RS
+.nf
+
+\fBecho $* | xargs -n 2 diff
+\fP
+.fi
+.RE
+.LP
+.IP " 5." 4
+On XSI-conformant systems, the following moves all files from directory
+\fB$1\fP to directory \fB$2\fP, and echoes each move
+command just before doing it:
+.sp
+.RS
+.nf
+
+\fBls $1 | xargs -I {} -t mv $1/{} $2/{}
+\fP
+.fi
+.RE
+.LP
+.SH RATIONALE
+.LP
+The \fIxargs\fP utility was usually found only in System V-based systems;
+BSD systems included an \fIapply\fP utility that
+provided functionality similar to \fIxargs\fP \fB-n\fP \fInumber\fP.
+The SVID lists \fIxargs\fP as a software development
+extension. This volume of IEEE\ Std\ 1003.1-2001 does not share the
+view that it is used only for development, and
+therefore it is not optional.
+.LP
+The classic application of the \fIxargs\fP utility is in conjunction
+with the \fIfind\fP
+utility to reduce the number of processes launched by a simplistic
+use of the \fIfind\fP
+\fB-exec\fP combination. The \fIxargs\fP utility is also used to enforce
+an upper limit on memory required to launch a process.
+With this basis in mind, this volume of IEEE\ Std\ 1003.1-2001 selected
+only the minimal features required.
+.LP
+Although the 255 exit status is mostly an accident of historical implementations,
+it allows a utility being used by \fIxargs\fP
+to tell \fIxargs\fP 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-125 range when \fIxargs\fP
+exits. There is no statement of how the various non-zero utility
+exit status codes are accumulated by \fIxargs\fP. 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.
+.LP
+Several other \fIxargs\fP options were withdrawn because simple alternatives
+already exist within this volume of
+IEEE\ Std\ 1003.1-2001. For example, the \fB-i\fP \fIreplstr\fP option
+can be just as efficiently performed using a shell
+\fBfor\fP loop. Since \fIxargs\fP calls an \fIexec\fP function with
+each input line, the \fB-i\fP option does not usually
+exploit the grouping capabilities of \fIxargs\fP.
+.LP
+The requirement that \fIxargs\fP never produces command lines such
+that invocation of \fIutility\fP is within 2048 bytes of
+hitting the POSIX \fIexec\fP {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 IEEE\ Std\ 1003.1-2001
+is 4096 bytes and the minimum value allowed by this
+volume of IEEE\ Std\ 1003.1-2001 is 2048 bytes; therefore, the 2048
+bytes difference seems reasonable. Note, however, that
+\fIxargs\fP may never be able to invoke a utility if the environment
+passed in to \fIxargs\fP comes close to using {ARG_MAX}
+bytes.
+.LP
+The version of \fIxargs\fP required by this volume of IEEE\ Std\ 1003.1-2001
+is required to wait for the completion of
+the invoked command before invoking another command. This was done
+because historical scripts using \fIxargs\fP 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 \fIxargs\fP terminates normally.
+.LP
+The \fB-e\fP option was omitted from the ISO\ POSIX-2:1993 standard
+in the belief that the \fIeofstr\fP 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 \fB-e\fP option was specified.
+In that case, a simple \fIsed\fP script could be used to duplicate
+the \fB-e\fP functionality. Further investigation
+revealed that:
+.IP " *" 3
+The logical end-of-file string was checked for after quote and escape
+processing, making a \fIsed\fP script that provided equivalent functionality
+much more difficult to write.
+.LP
+.IP " *" 3
+The default was to perform logical end-of-file processing with an
+underscore as the logical end-of-file string.
+.LP
+.LP
+To correct this misunderstanding, the \fB-E\fP \fIeofstr\fP option
+was adopted from the X/Open Portability Guide. Users should
+note that the description of the \fB-E\fP option matches historical
+documentation of the \fB-e\fP option (which was not adopted
+because it did not support the Utility Syntax Guidelines), by saying
+that if \fIeofstr\fP is the null string, logical end-of-file
+processing is disabled. Historical implementations of \fIxargs\fP
+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 \fIstring\fP argument could be generated using
+single or double quotes ( \fB''\fP or \fB""\fP ). Since this behavior
+was not documented historically, it is considered to be
+a bug.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIShell Command Language\fP , \fIecho\fP , \fIfind\fP , the System
+Interfaces volume of IEEE\ Std\ 1003.1-2001, \fIexec\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. 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.opengroup.org/unix/online.html .