Snakemake中--rerun-triggers通过bash变量传递报错问题
解决Snakemake通过bash变量传递--rerun-triggers参数的问题
问题原因
bash变量展开时,{mtime,input,params}会被作为一个整体字符串传递给Snakemake,而非解析为多个独立的触发选项,导致Snakemake将其识别为无效参数。
可行解决方案
方案1:使用Bash数组(推荐,安全可靠)
通过数组存储参数,确保每个选项被作为独立参数传递:
# 定义数组 snakemake_extra=(--rerun-triggers mtime input params) # 执行命令 snakemake "${snakemake_extra[@]}" -pr --snakefile Snakefile --configfile config.yaml -c 20 -n
数组展开后会将--rerun-triggers、mtime、input、params分别作为独立参数传递,Snakemake可正确识别每个触发选项。
方案2:使用逗号分隔的参数值
Snakemake支持通过逗号直接分隔多个--rerun-triggers选项,修改变量定义即可:
# 修改变量定义 snakemake_extra="--rerun-triggers mtime,input,params" # 执行命令(保持原有格式) snakemake $snakemake_extra -pr --snakefile Snakefile --configfile config.yaml -c 20 -n
此时传递的参数为--rerun-triggers和mtime,input,params,Snakemake会自动解析逗号分隔的内容为多个有效选项。
方案3:使用eval展开大括号(仅变量内容可控时使用)
通过eval让Bash预先展开变量中的大括号,转换为独立参数:
# 保持原有变量定义 snakemake_extra="--rerun-triggers {mtime,input,params}" # 用eval执行命令 eval snakemake "$snakemake_extra" -pr --snakefile Snakefile --configfile config.yaml -c 20 -n
注意:eval会执行变量中的所有命令,若变量内容不可控存在安全风险,仅在确认变量无恶意内容时使用。
内容的提问来源于stack exchange,提问作者Carlus
相关产品推荐
相关产品推荐

