Nextflow代码报错:无有效错误信息,提示Unexpected input: '{'
问题
Nextflow代码运行时抛出错误:cause: Unexpected input: '{'",无有效错误详情。代码及场景如下:
workflow fqcheck { take: path reads Channel.fromPath(reads) .map {file -> def idx = ${file}.getName().replaceAll("\\D","") "fqcheck33 -r ${file} -c ${file%.fq.gz}.${idx}.fqcheck" } publishDir params.outdir } workflow { fqcheck(ch_fq) }
ch_fq为成对的FastQ文件,例如sample.clean_1.fq.gz与sample.clean_2.fq.gz。
问题分析与修复
1. 语法错误根源
报错是因为Groovy闭包内错误使用了${file}格式引用变量。在Groovy代码块(闭包)中,直接使用变量名即可,不需要${}包裹——${}仅用于字符串插值场景。
2. 代码修复及功能补全
原代码仅生成了命令字符串,但未定义process执行命令,即使修复语法也不会实际运行任务。以下是完整修复后的代码:
workflow fqcheck { take: path reads // 修复变量引用语法,生成命令通道 Channel.fromPath(reads) .map { file -> def idx = file.getName().replaceAll("\\D","") "fqcheck33 -r ${file} -c ${file%.fq.gz}.${idx}.fqcheck" } .into { cmd_channel } // 定义process执行命令 process run_fqcheck { input: val cmd from cmd_channel output: path "*.fqcheck" into fqcheck_results // 配置结果发布目录 publishDir params.outdir, mode: 'copy' script: cmd } } workflow { fqcheck(ch_fq) }
关键修改点
- 移除
def idx = ${file}.getName()中的${},改为def idx = file.getName() - 添加
process run_fqcheck,用于接收命令通道并执行fqcheck33工具 - 给
publishDir指定mode: 'copy',确保结果文件被复制到输出目录(默认是链接)
内容的提问来源于stack exchange,提问作者Calli
相关产品推荐
相关产品推荐

