加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash:使用文件列表限制for循环中的子shell

发布时间:2020-12-15 22:51:04 所属栏目:安全 来源:网络整理
导读:我一直试图让for循环同时运行一堆命令,并试图通过子 shell进行.我设法拼凑下面的脚本进行测试,它似乎工作正常. #!/bin/bashfor i in {1..255}; do ( #commands )donewait 唯一的问题是我的实际循环将用于文件中的i *然后它只是崩溃,我假设因为它启动了太多的
我一直试图让for循环同时运行一堆命令,并试图通过子 shell进行.我设法拼凑下面的脚本进行测试,它似乎工作正常.

#!/bin/bash
for i in {1..255}; do
  (
    #commands
  )&

done
wait

唯一的问题是我的实际循环将用于文件中的i *然后它只是崩溃,我假设因为它启动了太多的子shell来处理.所以我补充道

#!/bin/bash
for i in files*; do
  (
    #commands
  )&
if (( $i % 10 == 0 )); then wait; fi
done
wait

现在失败了.有没有人知道这方面的方法?要么使用不同的命令来限制子壳的数量,要么为$i提供一个数字?

干杯

解决方法

您可以找到有用的数据来计算有工作的工作数量.例如.:

wc -w <<<$(jobs -p)

所以,你的代码看起来像这样:

#!/bin/bash
for i in files*; do
  (
    #commands
  )&
  if (( $(wc -w <<<$(jobs -p)) % 10 == 0 )); then wait; fi
done
wait

正如@chepner所说:

在bash 4.3中,您可以使用wait -n在任何作业完成后立即继续,而不是等待所有作业

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读