我尝试使用 GNU 并行运行命令 recon-all自由冲浪者预进程我有一个 bash 患者列表数组,可以同时运行 8 项专利:
root@4d8896dfec6c:/tmp# echo ${ids[@]}
G001 G002 G003 G004 G005 G006 G007 G008
并尝试使用命令运行:
echo ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache
它不起作用,因为我想我需要在 ls 表示中使用 bash 数组,例如:
ls ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache
我怎样才能做到这一点?
答案1
如果 ids 适合单个命令行:
parallel --jobs 28 recon-all -s {.} -all -qcache ::: "${ids[@]}"
其他如卢卡斯建议:
printf %s\\n "${ids[@]}" | parallel --jobs 28 recon-all -s {.} -all -qcache
答案2
问题是parallel
希望输入用换行符分隔,但当您使用echo
它时却用空格分隔。为了打印一些由换行符分隔的单词,您可以尝试其中之一
echo one two three | tr ' ' '\n' # in case your input can not be controlled by you
printf '%s\n' one two three # if you can control the words eg if you have an array
所以你可能应该这样做:
printf '%s\n' "${ids[@]}" | parallel --jobs 28 recon-all -s {.} -all -qcache
请记住一般引用数组替换和变量,以防止意外的分词和其他副作用(如果您的值包含特殊字符)。