xargs
有一个选项-x
指定如果超过xargs
大小(请参阅该选项)则退出。-s
这是否意味着xargs
要么立即执行所有参数(如果命令行中的字符数不超过 指定的数量-s
),要么根本不执行(否则)?
-x
使用,xargs
永远不会执行命令行长度不超过 指定的数量的参数的正确子集(意思是:不是全部),这是否正确-s
?
答案1
-x
导致xargs
一旦处理不适合的参数就退出,而不尝试使用当前正在构建的行中的任何参数。
您可以使用以下命令查看它所带来的差异:
(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048
这里,xargs
接收 1 到 2048 之间的整数,每个整数后跟一个空格,然后是 1 到 1024 之间的所有整数,不带分隔符。它运行echo
以输出参数,并遵守 2048 个字符的限制。当它读取最后一个参数时,该参数无法容纳在一行中,xargs
输出“参数行太长”错误,但仍然使用echo
在遇到最后一个参数之前积累的参数进行调用,因此您仍然可以看到从 1 到 2048 的所有整数。
和-x
:
(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048 -x
在 1854 处停止,因为xargs
遇到长参数,它正在构建从 1855 开始的参数行,并且由于该-x
选项,它不会尝试对当前正在构建的参数行执行任何操作。
我认为不使用或不使用 都不可能xargs
成功运行命令。该参数仅确保,如果一个参数行最终变得太长,则根本不会处理其中的任何部分。-x
-x
-x
无论有或没有-x
,xargs
都不处理溢出参数之后的参数。
(谢谢伊尔卡丘指出我之前的答案版本是错误的。)