【发布时间】:2020-12-15 03:06:30
【问题描述】:
在一个 bash 脚本中,我试图将多个不同的 fastq 文件和几个用户提供的静态变量传递给 GNU Parallel。我无法对静态变量进行硬编码,因为虽然它们不会在脚本中更改,但它们是由用户设置的,并且在使用之间是可变的。我尝试了几种不同的方法,但收到错误argument -b/--bin: expected one argument
尝试 1:
binSize="10000"
outputDir="output"
errors="1"
minReads="10"
ls fastq_F* | parallel "python myscript.py -f split_fastq_F{} -b $binSize -o $outputDir -e $errors -p -t $minReads"
尝试 2:
my_func() {
python InDevOptimizations/DemultiplexUsingBarcodes_New_V1.py \
-f split_fastq_F$1 \
-b $binSize \
-o $outputDir \
-e $errors \
-p \
-t $minReads
}
export -f my_func
ls fastq_F* | parallel my_func
显然我没有正确传递静态变量...但我似乎无法掌握正确的方法是什么。
【问题讨论】:
-
您是否考虑过
exporting 这些变量?给我的错误信息表明$binSize的内容没有进入调用... -
这是个好主意,我会试试的。感谢您的建议。
-
结果:在“尝试 2:”的上下文中,导出似乎有所帮助,但它导致了不同的错误“没有这样的文件或目录:'split_fastq_F'”,表明我的更改变量被错误地传递给函数。
-
更新结果:导出解决了问题。上面提到的其他问题是由于与我的实现无关的问题。
-
我认为使用
parallel my_func ::: fastq_F*的样式会更安全、更正确
标签: linux bash multithreading loops gnu-parallel