如何调用 Nextflow 脚本中创建的变量?
How to call a variable created in the script in Nextflow?
我有一个从文本文件创建变量的 nextflow 脚本,我需要将该变量的值传递给命令行命令(这是一个 bioconda 包)。这两个过程发生在“脚本”部分。我尝试使用“$”符号调用变量但没有任何结果,我认为是因为在 nextflow 脚本的脚本部分使用该符号是为了调用输入部分中定义的变量。
为了让自己更清楚,这是我正在努力实现的代码示例:
params.gz_file = '/path/to/file.gz'
params.fa_file = '/path/to/file.fa'
params.output_dir = '/path/to/outdir'
input_file = file(params.gz_file)
fasta_file = file(params.fa_file)
process foo {
//publishDir "${params.output_dir}", mode: 'copy',
input:
path file from input_file
path fasta from fasta_file
output:
file ("*.html")
script:
"""
echo 123 > number.txt
parameter=`cat number.txt`
create_report $file $fasta --flanking $parameter
"""
}
通过这样做,我收到的错误是:
Error executing process > 'foo'
Caused by:
Unknown variable 'parameter' -- Make sure it is not misspelt and defined somewhere in the script before using it
有没有什么方法可以在脚本中调用变量 parameter
而 Nextflow 不会将其解释为输入文件?提前致谢!
在顶部 'params' 部分声明“参数”。
params.parameter="1234"
(..)
script:
"""
(...)
create_report $file $fasta --flanking ${params.parameter}
(...)
"""
(...)
并使用“--参数 87678”调用“nextflow 运行”
script block 的文档在这里很有用:
Since Nextflow uses the same Bash syntax for variable substitutions in
strings, you need to manage them carefully depending on if you want to
evaluate a variable in the Nextflow context - or - in the Bash
environment execution.
一种解决方案是通过在变量前面加上反斜杠 (\
) 字符来转义您的 shell (Bash) 变量,如下例所示:
process foo {
script:
"""
echo 123 > number.txt
parameter="$(cat number.txt)"
echo "${parameter}"
"""
}
另一种解决方案是使用 shell block,其中美元 ($
) 变量由您的 shell(Bash 解释器管理),而感叹号 ( !
) 变量由 Nextflow 处理。例如:
process bar {
echo true
input:
val greeting from 'Hello', 'Hola', 'Bonjour'
shell:
'''
echo 123 > number.txt
parameter="$(cat number.txt)"
echo "!{greeting} parameter ${parameter}"
'''
}
我有一个从文本文件创建变量的 nextflow 脚本,我需要将该变量的值传递给命令行命令(这是一个 bioconda 包)。这两个过程发生在“脚本”部分。我尝试使用“$”符号调用变量但没有任何结果,我认为是因为在 nextflow 脚本的脚本部分使用该符号是为了调用输入部分中定义的变量。
为了让自己更清楚,这是我正在努力实现的代码示例:
params.gz_file = '/path/to/file.gz'
params.fa_file = '/path/to/file.fa'
params.output_dir = '/path/to/outdir'
input_file = file(params.gz_file)
fasta_file = file(params.fa_file)
process foo {
//publishDir "${params.output_dir}", mode: 'copy',
input:
path file from input_file
path fasta from fasta_file
output:
file ("*.html")
script:
"""
echo 123 > number.txt
parameter=`cat number.txt`
create_report $file $fasta --flanking $parameter
"""
}
通过这样做,我收到的错误是:
Error executing process > 'foo'
Caused by:
Unknown variable 'parameter' -- Make sure it is not misspelt and defined somewhere in the script before using it
有没有什么方法可以在脚本中调用变量 parameter
而 Nextflow 不会将其解释为输入文件?提前致谢!
在顶部 'params' 部分声明“参数”。
params.parameter="1234"
(..)
script:
"""
(...)
create_report $file $fasta --flanking ${params.parameter}
(...)
"""
(...)
并使用“--参数 87678”调用“nextflow 运行”
script block 的文档在这里很有用:
Since Nextflow uses the same Bash syntax for variable substitutions in strings, you need to manage them carefully depending on if you want to evaluate a variable in the Nextflow context - or - in the Bash environment execution.
一种解决方案是通过在变量前面加上反斜杠 (\
) 字符来转义您的 shell (Bash) 变量,如下例所示:
process foo {
script:
"""
echo 123 > number.txt
parameter="$(cat number.txt)"
echo "${parameter}"
"""
}
另一种解决方案是使用 shell block,其中美元 ($
) 变量由您的 shell(Bash 解释器管理),而感叹号 ( !
) 变量由 Nextflow 处理。例如:
process bar {
echo true
input:
val greeting from 'Hello', 'Hola', 'Bonjour'
shell:
'''
echo 123 > number.txt
parameter="$(cat number.txt)"
echo "!{greeting} parameter ${parameter}"
'''
}