我目前正在写一个snakemake管道,我想包含一个perl脚本。这个脚本不是我写的,而是来自一个github页面。我以前从来没有用过perl。
我通过conda安装了perl(5.32.1)。我已经安装了miniconda,正在我的大学unix服务器上工作。
Perl脚本规则的代码如下所示:
rule r1_filter5end:
input:
config["arima_mapping"] + "unprocessed_bam/{sample}_R1.sam"
output:
config["arima_mapping"] + "filtered_bam/{sample}_R1.bam"
params:
conda:
"../envs/arima_mapping.yaml"
log:
config["logs"] + "arima_mapping/r1_filter5end/{sample}_R1.log"
threads:
12
shell:
"samtools view --threads {threads} -h {input} -b | perl ../scripts/filter_five_end.pl | samtools -b -o {output} 2> log"
运行此程序时,收到以下错误:
无法打开Perl脚本“../scripts/filter_five_end.pl”:找不到这样的文件或目录
从我的研究中了解到,perl脚本的第1行设置了我的perl可执行文件的路径。
#!/usr/bin/perl
由于我使用的是通过conda安装的perl,所以这可能是错误的。所以我将路径设置为:
#!/home/mi/my_user/miniconda3/bin/perl
然而这仍然不起作用,不管我是否调用
perl ../scripts/filter_five_end.pl
或
../scripts/filter_five_end.pl
也许它只是不可能运行perl脚本通过snakemake?任何人谁遇到过这个具体的类似情况?^^
2条答案
按热度按时间ttcibm8c1#
问题不出在shebang上,shebang中的解释器路径并不重要,因为你是直接用
perl ../path
调用它的。执行这个命令的shell会解析到perl
程序的路径(很可能是conda的路径),然后运行脚本,只从脚本中的shebang获取标志(比如-T
或-w
)。这个错误消息意味着它找不到实际的脚本文件。我怀疑当你运行shell命令时,它在错误的目录中。尝试一个完全限定的路径。
正如任择议定书在其评论中所述:
我忘了snakemake总是从Snakemake文件中查找文件,而不是规则保存的目录。
dkqlctbz2#
不完全是一个答案,但也许相关:
我忘了snakemake总是从Snakemake文件中查找文件,而不是规则保存的目录。
我认为这并不完全正确。参考点是
-d/--directory
设置的目录,默认情况下,它是执行snakemake的位置: