Snakemake shell奇怪的执行顺序



我试图通过FTP下载文件并处理它之后。例如如下规则

rule all:
output:
test_input = "ref/" + test_file
shell:
"""        
ftp -ni {test_domain} <<-EOF 1> log.txt 2> log.txt
user anonymous " "
lcd ref
cd {test_path}
get {test_file}
# quit
EOF
ls
"""

这里有两个问题。首先:在当前代码中,ls将在ftp服务器端执行。第二:如果取消对quit的注释,那么我在EOF之后添加的任何命令都不会被执行。即使在常规的shell脚本中,它也可以正常工作。

我错过了什么?

就像@tripleee提到的那样,看起来在here-doc的末尾缺少了限制字符串。这将导致ls通过ftp在服务器上执行,quit命令停止进一步执行。

Snakemake不会在shell指令下去掉字符串字面值中的前导空格。要使脚本按预期工作,您可以删除shell指令中的前导空格,或者确保here-doc中的任何前导空格都只是文字制表符。

这是一个更新的脚本,为我产生预期的输出:

rule all:
output:
test_input = "ref/" + test_file
shell:
"""
ftp -ni {test_domain} <<EOF 1> log.txt 2> log.txt
user anonymous " "
lcd ref
cd {test_path}
get {test_file}
quit
EOF
ls
"""

相关内容

  • 没有找到相关文章

最新更新