2012-03-16 64 views
2

我是一名统计人员,我最近为一个研究项目编写了一个bash管道,它基本上是一个主要的bash脚本,在每一步调用bash,python和R脚本分析,当然还有很多步骤和很多脚本。我的朋友告诉我,我可以为他们创建一个makefile,但除了编写脚本之外,我几乎没有计算机上的经验。我找到了一些例子,但他们是为VC。我的病例是否也需要像VC程序一样编译?任何人都可以与我分享他的一些经验吗? 例如,我有main.sh,它调用step1.py,step2.sh,step3.r和step2.sh调用step2.1.py,step2.2.r如何通过makefile链接它们?如何为python,R和bash脚本编写makefile

+0

不,你不需要编译Python,R或Bash脚本。你认为你需要一个Makefile吗? – 2012-03-16 18:14:26

+0

Make非常适合制作文件(尽管它可以做其他事情)。当一个进程的输出文件是另一个进程的输入文件时,它尤其擅长在DAG中创建文件;如果有人修改了一些输入文件,Make会确定哪些步骤需要将所有内容更新*,然后执行。如果这听起来像你的情况,我们很乐意帮助你;否则,Make不适合你的工作,并且没有理由采用它。 – Beta 2012-03-16 18:24:37

+0

作为一种语言提供一些非常强大的宏/文本替换机制。即使你的代码没有处理文件上的任何数据,我也发现在Bash之上使用Make作为图层/协调器非常强大。如果看起来每个脚本之间都存在一个复杂的依赖关系网络,并且您希望将这些依赖关系表示为位于所有这些脚本之上的文件,那么IMO Make实际上可能对您很有帮助。 – 2012-03-17 03:38:22

回答

1
step1: 
    step1.py;\ 
    $(MAKE) step2;\ 
    step3.r 

step2: 
    step2.1.py;\ 
    step2.2.r 

all: step1 
    echo "Done" 

从您的描述中,它听起来像main.sh和step2.sh,只是调用python和R脚本。如果是这样的话,那么上面的Makefile就会替换它们。如果他们有其他步骤,那么您可以在step1或step2目标中添加这些bash命令。

像这样使用Makefile将允许您仅执行部分执行序列以进行调试。

+0

很好,谢谢Brant – user1269298 2012-04-09 22:19:45

+0

@ user1269298如果这对你有用,请接受答案。 – 2012-04-10 00:15:50