我试图通过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
"""