GNUを使用してrecon-allコマンドを並列に実行してみました。無料サーファー前処理8つのパテントを同時に実行するbashの患者ロール配列があります。
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
IDが単一のコマンドラインに収まる場合:
parallel --jobs 28 recon-all -s {.} -all -qcache ::: "${ids[@]}"
Lucasが提案したその他の事項:
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
値に特殊文字が含まれている場合に予期しないトークン化やその他の副作用を防ぐために、通常は配列置換と変数を引用することを忘れないでください。