Snakemake shell 奇怪的执行顺序

Snakemake shell strange execution order

我正在尝试通过 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 - none 我在 EOF 之后添加的命令将永远被执行。即使在常规 shell 脚本中也能正常工作。

我错过了什么?

似乎此处文档末尾缺少限制字符串,。这导致 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
"""