xargs 输入算术?
arithmetic with xargs input?
我有一个 xargs 命令:
xargs -a es_doc_positions.txt -P 64 -I {} populate_es_index.py --start {} --end {}
是否可以接受输入 {}
并对其应用简单的算法?我想提供类似这样的结束参数:
$(({} + 100000 - 1))
到目前为止,我尝试过的方法都没有成功。
xargs
不会调用 shell 除非你告诉它。因此,它不能自己执行 shell 运算。
告诉 xargs
调用一个 shell,并在 shell 中执行你的算术:
xargs -a es_doc_positions.txt -P 64 -n 16 sh -c '
for arg do
./populate_es_index.py --start "$arg" --end "$(( arg + 100000 - 1 ))"
done
' _
末尾的下划线是 [=13=]
的占位符,因此 xargs
传递给 shell 的值将分配给 </code> 和更高版本。</p>
<p><code>-n
参数控制每个 sh
调用运行的实例数。当您接近输入批次的末尾时(当少于 P*n 值仍有待处理时),较低的值将导致较少的未使用 CPU 周期;更高的值将减少 CPU 启动 shell 个实例的开销。
请注意,此解决方案不使用 -I
是有意为之的。如果你想修改它这样做,你想把占位符作为最后一个参数,在 _
之后,not 作为代码中的子字符串;使用占位符作为子字符串会引入 shell 注入漏洞,并且还会阻止单个 shell 实例处理多个输入。
我有一个 xargs 命令:
xargs -a es_doc_positions.txt -P 64 -I {} populate_es_index.py --start {} --end {}
是否可以接受输入 {}
并对其应用简单的算法?我想提供类似这样的结束参数:
$(({} + 100000 - 1))
到目前为止,我尝试过的方法都没有成功。
xargs
不会调用 shell 除非你告诉它。因此,它不能自己执行 shell 运算。
告诉 xargs
调用一个 shell,并在 shell 中执行你的算术:
xargs -a es_doc_positions.txt -P 64 -n 16 sh -c '
for arg do
./populate_es_index.py --start "$arg" --end "$(( arg + 100000 - 1 ))"
done
' _
末尾的下划线是 [=13=]
的占位符,因此 xargs
传递给 shell 的值将分配给 </code> 和更高版本。</p>
<p><code>-n
参数控制每个 sh
调用运行的实例数。当您接近输入批次的末尾时(当少于 P*n 值仍有待处理时),较低的值将导致较少的未使用 CPU 周期;更高的值将减少 CPU 启动 shell 个实例的开销。
请注意,此解决方案不使用 -I
是有意为之的。如果你想修改它这样做,你想把占位符作为最后一个参数,在 _
之后,not 作为代码中的子字符串;使用占位符作为子字符串会引入 shell 注入漏洞,并且还会阻止单个 shell 实例处理多个输入。