首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在shell脚本中使用并行执行?

如何在shell脚本中使用并行执行?
EN

Stack Overflow用户
提问于 2010-05-08 03:09:21
回答 6查看 37K关注 0票数 19

我有一个C shell脚本,它执行以下操作:

代码语言:javascript
复制
#!/bin/csh
gcc example.c -o ex
gcc combine.c -o combine
ex file1 r1     <-- 1
ex file2 r2     <-- 2
ex file3 r3     <-- 3
#... many more like the above
combine r1 r2 r3 final
\rm r1 r2 r3

有没有办法让123行在parallel中运行,而不是一个接一个地运行?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-08 03:13:52

将其转换为具有适当依赖项的Makefile。然后,您可以使用make -j使所有可能的操作都可以并行运行。

请注意,Makefile中的所有缩进都必须是制表符。选项卡显示了要运行的命令所在的Make。

还要注意,这个Makefile现在正在使用GNU Make扩展(通配符和subst函数)。

它可能看起来像这样:

代码语言:javascript
复制
export PATH := .:${PATH}

FILES=$(wildcard file*)
RFILES=$(subst file,r,${FILES})

final: combine ${RFILES}
    combine ${RFILES} final
    rm ${RFILES}

ex: example.c

combine: combine.c

r%: file% ex
    ex $< $@
票数 13
EN

Stack Overflow用户

发布于 2010-05-08 03:24:58

在狂欢中我会这么做;

代码语言:javascript
复制
ex file1 r1  &
ex file2 r2  &
ex file3 r3  &
wait
... continue with script...

然后把它们生出来并行运行。你可以用check out this SO thread来看另一个例子。

票数 8
EN

Stack Overflow用户

发布于 2010-05-08 03:27:15

代码语言:javascript
复制
#!/bin/bash

gcc example.c -o ex
gcc combine.c -o combine

# Call 'ex' 3 times in "parallel"
for i in {1..3}; do
  ex file${i} r${i} &
done

#Wait for all background processes to finish
wait

# Combine & remove
combine r1 r2 r3 final
rm r1 r2 r3

我稍微修改了代码,使用了大括号扩展{1..3},而不是硬编码数字,因为我刚刚意识到你说的文件比3多得多。大括号扩展通过将大括号内的'3‘替换为你需要的任何数字,使得扩展到更大的数字变得微不足道。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2791069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档