在命令行长度不超过“-s”限制的情况下,“xargs -x”是否永远不会执行参数的正确子集?

在命令行长度不超过“-s”限制的情况下,“xargs -x”是否永远不会执行参数的正确子集?

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都不处理溢出参数之后的参数。

(谢谢伊尔卡丘指出我之前的答案版本是错误的。)

相关内容