gpt4 book ai didi

bash - xargs 不适用于内置的 shell 函数

转载 作者:行者123 更新时间:2023-11-29 09:16:10 24 4
gpt4 key购买 nike

我正在尝试加快数据库的处理速度。我迁移到 xargs。但我被严重困住了。如果 xargs 调用的命令不是内置命令,则将参数列表传送到 xargs 不起作用。我不明白为什么。这是我的代码:

#!/bin/bash

list='foo
bar'

test(){
echo "$1"
}

echo "$list" | tr '\012' '\000' | xargs -0 -n1 -I '{}' 'test' {}

所以根本没有输出。测试功能永远不会被执行。但是,如果我将“xargs”命令中的“test”替换为“echo”或“printf”,它就可以正常工作。

最佳答案

您不能将 shell 函数直接传递给 xargs,但可以调用 shell。

printf 'foo\0bar\0' |
xargs -r -0 sh -c 'for f; do echo "$f"; done' _

sh -c '...' 中的内容可以任意复杂;如果你真的想要,你可以声明然后使用你的函数。但由于它简单且非递归,我只是内联了功能。

虚拟下划线参数是因为 sh -c 'script' 之后的第一个参数用于填充 $0

因为您的问题似乎与优化有关,所以我想您不想为传递给 xargs 的每个项目生成一个单独的 shell——如果您这样做了,没有什么会变得更快。所以我放入了 for 循环并取出 -Ixargs 的参数。

关于bash - xargs 不适用于内置的 shell 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29611539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com