2の累乗でいくつかのスクリプトを並列に実行したいと思います。私が望む2つの機能のリストをGNU Parallelに提供するとうまくいきます。
%>parallel echo {} ::: 32, 64, 128, 256, 512, 1024
32
64
128
256
512
1024
%>
また、問題なくGNU Parallelにさまざまな値を提供できます。
%>parallel echo {} ::: {5..10}
5
6
7
8
9
10
%>
ただし、GNU Parallel コマンドに算術ビットが含まれるとすぐに構文エラーが発生します。
%>parallel echo $((2**{})) ::: {5..10}
bash: 2**{}: syntax error: operand expected (error token is "{}")
%>
次のようにforループでこれらの値を生成できることは驚くべきことです。
%>for N in {5..10}; do echo $((2**N)); done
32
64
128
256
512
1024
%>
GNU Parallelを使用してこれを行うには?私は順序に興味がありません。
ベストアンサー1
実行中のコマンド全体を引用する必要がありますparallel
。たとえば、次のようになります。
$ parallel 'echo $((2**{}))' ::: {5..10}
32
64
128
256
512
1024
実際には、コマンドのbash算術部分を引用するだけで効果があります。
$ parallel echo '$((2**{}))' ::: {5..10}
32
64
128
256
512
1024
その理由は、引用符がない場合、bashは算術を拡張して評価しようとするためです。今後それを引き渡しても、parallel
打つ2**{}
価値があるものがないという意味ではありません。エラーメッセージは実際には並列ではなく bash で発生します。
$ echo $((2**{}))
-bash: 2**{}: syntax error: operand expected (error token is "{}")