手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

xargs(1)

名称

xargs - 构造参数列表并调用实用程序

用法概要

xargs [-t] [-p] [
-e[eofstr]] [-E 
eofstr] 
     [-I replstr] [-i[
replstr]] [-L number] [
-l[number]] 
     [-n number [-x]] [
-s size] [utility [
argument...]]

描述

xargs 实用程序可以构造一个命令行,使其包含指定的 utilityargument 操作数,后跟从标准输入中依次读取的符合选项所指定长度和个数限制的参数。xargs 实用程序随后将调用构造的命令行并等待其完成。该序列将一直重复,直到检测到标准输入中出现文件结束条件或调用构造的命令行返回退出状态 255 为止。

标准输入中的参数必须以不带引号的空白字符、非转义空白字符或换行符分隔。零个或多个非双引号 (") 和非换行符的字符串可以用双引号引起。零个或多个非撇号 (') 和非换行符的字符串可以用撇号引起。不带引号的任何字符均可转义,方法是在前面添加一个反斜杠 (\)。将执行一次或多次 utility,直到文件结束为止。如果 utility 指定的实用程序尝试从标准输入中读取,则产生的结果不确定。

生成的命令行长度是实用程序名称和视为字符串的每个参数(包括每个字符串的空字节结束符)的字节大小之和。xargs 将限制命令行长度,以使调用命令行时合并的参数和环境列表不能超过 {ARG_MAX}−2048 个字节。在该限制范围以内,如果 –n–s 选项均未指定,则缺省命令行长度至少为 {LINE_MAX}

选项

支持以下选项:

–0

输入项以空字符而非空格或 NEWLINE 结束,引号和反斜杠不会特殊对待,即每个字符都按字面意思理解。还会禁用文件结束字符串,并将其与其他任何参数一样对待。该选项在输入项可能包含空格、引号或反斜杠时非常有用。查找 –print0 选项可以生成适合该模式的输入。

–e[ eofstr]

eofstr 用作逻辑文件结束字符串。如果 –e–E 均未使用,则假定下划线 (_) 为逻辑 EOF 字符串。如果省略了 eofstr 选项参数,会禁用逻辑 EOF 字符串功能,并且会按字面意思理解下划线。xargs 实用程序将读取标准输入,直到遇到文件结束或逻辑 EOF 字符串为止。

–E eofstr

指定要替换缺省下划线的逻辑文件结束字符串。xargs 将读取标准输入,直到遇到文件结束或逻辑 EOF 字符串为止。如果 eofstr 为空字符串,会禁用逻辑文件结束字符串功能,并且会按字面意思理解下划线。

–I replstr

插入模式。针对标准输入中的每一行执行 utility,将整行视为单个参数,将其插入每次出现的 replstrargument sargument 最多包含五个参数,其中每个参数可包含一个或多个 replstr 实例。将忽略每行开头的任何空白字符。构造的参数不能超过 255 个字节。强制启用选项 –x–I–i 选项互斥;指定的最后一个选项有效。

–i[ replstr]

该选项等效于 –I replstr。如果省略了选项参数,则假定字符串 { }replstr

–L number

针对标准输入中的每 number 个非空参数行执行 utility。最后一次调用 utility 时,如果剩余参数行少于 number 个,则使用的参数行就会较少。除非行中的最后一个字符为空白字符,否则视为行以第一个换行符结束;尾随的空白字符表示续到下一个非空行(含尾随的空白字符)。–L–l–n 选项互斥;指定的最后一个选项有效。

-l[number ]

(字母 ell。)该选项等效于 –L number。如果省略了 number,则假定为 1。强制启用选项 –x

–n number

使用尽可能多的标准输入参数调用 utility,最多达到 number(十进制正整数)个参数的上限。如果出现以下情况,则使用较少的参数:

  • 累计的命令行长度超过了 –s 选项指定的大小,或者在未指定 –s 选项时超过了 {LINE_MAX}

  • 最后一次迭代时,剩余的操作数少于 number 个,但不是零个。

–p

提示符模式。询问用户是否每次调用均执行 utility。启用跟踪模式 (–t),以便将后跟提示符的要执行的命令实例写入标准错误。如果从 /dev/tty 中读取了肯定性响应(特定于用户的语言环境),则会执行命令;否则,将跳过 utility 的特定调用。

–s size

使用尽可能多的标准输入参数调用 utility,从而生成小于 size(十进制正整数)个字节的命令行长度。如果出现以下情况,则使用较少的参数:

  • 参数总数超过了 –n 选项指定的数目

  • 行总数超过了 –L 选项指定的数目

  • 累计到 size 个字节之前,在标准输入中遇到了文件结束条件

支持至少达到 {LINE_MAX} 个字节的 size 值,前提是符合“说明”部分指定的限制。如果指定的值大于实现程序支持的值或者超过了“说明”部分指定的限制,则不会视为错误。xargs 将使用限制范围以内支持的最大值。

–t

启用跟踪模式。在调用前将生成的每个命令行写入标准错误。

–x

如果包含 number 个参数(请参见上文的 –n 选项)或 number 行(请参见上文的 –L 选项)的命令行不符合隐含或指定的大小(请参见上文的 –s 选项),则会终止。

操作数

支持下列操作数:

utility

通过使用 PATH 环境变量搜索路径找到的要调用的实用程序的名称。(请参见 environ(5)。)如果省略了 utility,则缺省值为 echo(1) 实用程序。如果 utility 操作数指定了 shell_builtins(1) 中的任何特殊内置实用程序,则产生的结果不确定。

argument

用于调用 utility 的初始选项或操作数。

用法

如果 xargs 使用的实用程序知道随后没有使用当前数据流的进一步调用,则可以通过退出状态 255 告知 xargs 终止。因此,utility 应该以相应的值显式执行 exit,以避免意外返回 255。

请注意,输入解析为行。以空白字符分隔参数。使用 xargs 将诸如 find dir –printls 之类的命令捆绑输出到要执行的命令时,如果任何文件名包含任何空白字符或换行符,则可能会产生异常结果。要解决该问题,可以使用 find 调用脚本,将找到的每个文件转换为带引号的字符串,随后将其传输到 xargs。请注意,xargs 使用的引号规则与 shell 中使用的不同。它们在这一点上不一致,因为现有应用程序依赖于当前的规则,而 shell 语法与其并不完全兼容。要将任何字符串转换为 xargs 能够正确解释的带引号的格式,可以采用一个简单的规则,即在字符串中的每个字符前面添加反斜杠 (\)。

{ARG_MAX} 值较大的实现程序上,xargs 生成的命令行可能会比 {LINE_MAX} 长。就调用实用程序而言,这不会产生问题。如果使用 xargs 创建文本文件,用户应该使用 –s 选项显式设置最大命令行长度。

如果出现错误,xargs 实用程序将返回退出状态 127,以使应用程序能够区分“无法找到实用程序”与“调用的实用程序已退出并已指明错误”。之所以选择值 127,是因为它不常用来表示其他含义。大多数实用程序使用小值表示“常规错误情形”,大于 128 的值可能会与因收到信号而终止混淆。值 126 的选择方式类似,以表示可以找到但无法调用实用程序。

示例

示例 1 使用 xargs 命令

以下示例会将所有文件从目录 $1 移至目录 $2,并在执行前回显各个移动命令:

example% ls $1 | xargs -I {} -t mv $1/{} $2/{}

以下命令会将用圆括号括起来的命令的输出合并到一行,随后将其写入文件结束 log

example% (logname; date; printf "%s\n" "$0 $*") | xargs >>log

以下命令将以最初键入为命令行参数(假定原始参数列表的元素中没有嵌入式空白字符)的后续成对参数调用 diff

example% printf "%s\n" "$*" | xargs -n 2 -x diff

询问用户要归档当前目录中的哪些文件。文件将归档到 arch ; 可以一次归档一个文件,也可以一次归档多个文件:

example% ls | xargs -p -L 1 ar -r arch
ls | xargs -p -L 1 | xargs ar -r arch

以下命令将以最初键入为命令行参数的后续成对参数执行:

example% echo $* | xargs -n 2 diff

环境变量

有关影响 xargs 执行的环境变量 LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH 的说明,请参见 environ(5)

PATH

确定 utility 的位置。

肯定的回答使用为用户语言环境中 LC_MESSAGES 类别的 yesexpr 关键字定义的扩展正则表达式进行处理。LC_COLLATE 类别中指定的语言环境定义为 yesexpr 定义的表达式中使用的范围、等效类和多字符整理元素的行为。LC_CTYPE 中指定的语言环境确定文本数据字符字节序列解释的语言环境,以及为 yesexpr 定义的表达式中使用的字符类的行为。请参见 locale(5)

退出状态

将返回以下退出值:

0

调用 utility 全部都返回了退出状态 0

1−125

符合指定要求的命令行无法汇编,一次或多次调用 utility 返回了非零退出状态,或者发生了其他某种错误。

126

已找到但无法调用 utility 指定的实用程序。

127

无法找到 utility 指定的实用程序。

如果符合指定要求的命令行无法汇编,则无法调用实用程序,调用实用程序将以信号终止,或者调用实用程序将以退出状态 255 退出,xargs 实用程序将写入一条诊断消息然后退出,而不会处理剩余的任何输入。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

echo(1)shell_builtins(1)attributes(5)environ(5)standards(5)