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在任何作业完成后立即继续,而不是等待所有作业 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |