几年前,我得知我可以用shebang制作一个Makefile可执行文件而高兴极了:
#!/usr/bin/env make -f
这样,我可以使用./my-pipeline
而不是make -f my-pipeline
来调用我的工作流程。
自那以后,我开始在分析工作流程中开始优先使用Snakemake而不是GNU Make。有没有一种简单的方法可以用Snakemake实现类似的行为?
答案 0 :(得分:1)
取决于您的平台以及是否需要传递其他参数,您也许可以轻松地做到这一点,或者做一些棘手的事情来使其工作。
如果
#!/usr/bin/env make -f
为您工作,这太棒了,因为它意味着您可以通过shebang传递任意多个参数(例如,如果您使用的是MacOS,则可能有效)。所以您应该只能说:
#!/usr/bin/env snakemake -s
这里的窍门是,您当前正在执行的脚本的文件名将作为最后一个参数传递给在shebang行中调用的任何内容,因此此行将使用文件本身作为输入来运行snakemake,无论它叫什么(即不必称为Snakefile)。
对我来说,这是行不通的,因为我只能通过Linux系统上的shebang行传递一个参数。如果我知道snakemake的路径,并且不需要指定其他命令行参数,则仍然可以使它像这样工作:
#!/usr/local/bin/snakemake -s
如果您需要做任何更复杂或跨平台的事情,这可能是一个不错的起点:How to use multiple arguments for awk with a shebang (i.e. #!)?