我有一个bash脚本,看起来像这样:
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
但是,在命令完成之前处理每一行,然后移动到下一行是非常耗时的,例如,我想一次处理20行,然后在完成后再处理20行.
我想用wget LINK1 >/dev/null 2>&1 &
行将命令发送到后台并继续执行,但这里有4000行,这意味着我会有性能问题,更不用说我应该同时启动多少个进程,所以这不是一个好主意.
我现在考虑的一个解决方案是判断其中一个命令是否仍在运行,例如,在20行之后,我可以添加以下循环:
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
当然,在这种情况下,我需要附加&;到队伍的尽头!但我觉得这不是正确的方式.
那么,我如何将每20行组合在一起,等待它们完成,然后再进入下一个20行呢?这个脚本是动态生成的,所以我可以在生成时对它做任何我想做的数学运算,但它不必使用wget,这只是一个示例,所以任何特定于wget的解决方案都不会对我有任何好处.