xargs 使用线程运行 bash 脚本(2 个参数)

xargs 使用线程运行 bash 脚本(2 个参数)

我有一个以下格式的文件:

"192.168.2.1" "80"
"172.16.1.1" "443"
"10.1.1.1" "8080"

其中包含多个本地 IP,我正在尝试使用 xargs 运行带有线程的脚本来执行以下命令:

cat local-IPs.txt|xargs -I % -P 100 python script.py % "execute command"

我现在面临的问题是,由于 local-IPs.txt 文件包含“IP”和“端口”,xargs 命令无法同时采用(IP 和 PORT)。

任何帮助都将非常感谢,谢谢。

答案1

如果可以的话,编辑script.py一下知识产权港口作为其最后一个参数。然后您可以使用-n(或-L)选项xargs

<local-IPs.txt xargs -n 2 -P 100 python script.py "execute command"

无用地使用cat已删除。

要清楚的是,它将执行类似如下的操作

python script.py "execute command" 192.168.2.1 80

因此,script.py期待这种形式至关重要。即使你不能修改script.py它本身,也许你可以复制它并使用该副本。


另一种方法是让xargsspawn 成为一个 shell,它的唯一任务就是改变参数的顺序。这应该适用于未修改 script.py

<local-IPs.txt xargs -n 2 -P 100 sh -c 'exec python script.py "$1" "$2" "execute command"' xargs-sh

sh每个都会有一个python。这可能会大大降低性能。

注意现在单引号里面有双引号。知道这一点很有用它如何影响参数和变量的扩展,尤其是如果execute command包含一些(您的评论表明它没有,但一般来说它可能)。

xargs-sh被解释这里

相关内容