Linux 将静态变量传递给GNU并行

Linux 将静态变量传递给GNU并行,linux,bash,multithreading,loops,gnu-parallel,Linux,Bash,Multithreading,Loops,Gnu Parallel,在bash脚本中,我试图将多个不同的fastq文件和几个用户提供的静态变量传递给gnuparallel。我不能硬编码静态变量,因为虽然它们在脚本中不会更改,但它们是由用户设置的,并且在不同的使用之间是可变的。我尝试了几种不同的方法,但得到了一个错误参数-b/--bin:应为一个参数 尝试1: binSize="10000" outputDir="output" errors="1" minReads="10" ls

在bash脚本中,我试图将多个不同的fastq文件和几个用户提供的静态变量传递给gnuparallel。我不能硬编码静态变量,因为虽然它们在脚本中不会更改,但它们是由用户设置的,并且在不同的使用之间是可变的。我尝试了几种不同的方法,但得到了一个错误
参数-b/--bin:应为一个参数

尝试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

很明显,我没有正确地传递静态变量。。。但我似乎无法理解正确的方法是什么。

当GNU Parallel无法实现您的期望时,请始终尝试
--dr

binSize="10000"
outputDir="output"
errors="1"
minReads="10"

ls fastq_F* | parallel --dr "python myscript.py -f split_fastq_F{} -b $binSize -o $outputDir -e $errors -p -t $minReads"
您使用的是“and not”,因此在GNU并行启动之前,变量应该被shell替换

如果命令在本地(即非远程)运行,则可以使用
导出变量

如果在远程服务器上运行,请使用
env_parallel

env_parallel --session

alias myecho='echo aliases'
env_parallel -S server myecho ::: work
myfunc() { echo functions $*; }
env_parallel -S server myfunc ::: work
myvar=variables
env_parallel -S server echo '$myvar' ::: work
myarray=(arrays work, too)
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2

env_parallel --end-session

您是否考虑过导出这些变量?给我的错误消息表明,
$binSize
的内容没有包含在调用中…这是一个好主意,我将尝试。感谢您的建议。结果:在“尝试2”的上下文中,Eporting似乎很有帮助:“但是它导致了不同的错误”没有这样的文件或目录:“split\u fastq\u F”“表示我的更改变量被错误地传递给函数。更新结果:导出解决了问题。”。上面提到的其他问题是由于我的实现出现了不相关的问题。我认为使用样式
parallel my\u func:::fastq\u F*