【发布时间】:2016-08-11 16:43:52
【问题描述】:
我有一个文件,其中包含一系列命令,每行一个。例如:
./run_test_1.sh fileA
./run_test_1.sh fileB
./run_test_2.sh fileC
我想使用 xargs 并行运行这些。
【问题讨论】:
标签: shell parallel-processing xargs
我有一个文件,其中包含一系列命令,每行一个。例如:
./run_test_1.sh fileA
./run_test_1.sh fileB
./run_test_2.sh fileC
我想使用 xargs 并行运行这些。
【问题讨论】:
标签: shell parallel-processing xargs
试试这个:
printf "%s\0" $(cat afile) | xargs -0 -P 3 -I xxx bash -c xxx
xargs 将并行运行来自afile 的 3 个命令。
命令或其选项中的特殊字符会破坏此解决方案。
下面的版本看似安全,但随后afile中的所有命令都是按顺序执行的:
printf "%s\0" "$(cat afile)" | xargs -0 -P 3 -I xxx bash -c xxx
-P 3 在这里没用。
【讨论】:
xargs 吗?它将如何并行化?啊。我看到原来的“工作”,但编辑是错误的。
printf "%s\0" "$(cat afile)" 发送整个文件。在测试中似乎是安全的,但是没有更多的并行执行(-P 3 没用)。如果在$(cat afile) 周围删除了 " 则存在并行性 AND 命令中的特殊字符会破坏它。
while IFS= read -r line; do bash -c "$line"; done < file 或类似的东西以安全的方式(假设初始命令是安全编写的)可能是可行的,但我必须更多地考虑它(或查找有关它的其他答案)。