使ってみようGNUパラレル定数と可変パラメータの組み合わせを使用して、共通を複数回実行します。しかし、何らかの理由でparallel
。
この例では、定数パラメータを'a b'
2つのパラメータの代わりに単一のパラメータとして渡す必要があります。debug-call
$ parallel debug-call 'a b' {} ::: {1..2}
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '1'
[0] = '[...]/debug-call'
[1] = 'a'
[2] = 'b'
[3] = '2'
debug-call
は簡単なスクリプトに渡されたすべてのパラメータを印刷しますargv
。代わりに、次の出力を見たいです。
[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '1'
[0] = '[...]/debug-call'
[1] = 'a b'
[2] = '2'
これはバグですか、それともGNU Parallelがコマンドライン引数をコマンドに渡す前に分割するのを防ぐオプションはありますか?
ベストアンサー1
parallel
引数接続を解析するために、シェル(呼び出し先のコンテキストによって異なりますが、通常はシェルから呼び出されたときと同じシェル)を実行します。
だから:
parallel debug-call 'a b' {} ::: 'a b' c
同じですか?
parallel 'debug-call a b {}' ::: 'a b' c
parallel
通知を受け取る予定:
your-shell -c 'debug-call a b <something>'
<something>
(希望的に)シェルのパラメータが正しく引用されました。たとえば、シェルがあればbash
実行されます。
bash -c 'debug-call a b a\ b'
希望する場所は次のとおりです。
parallel 'debug-call "a b" {}' ::: 'a b' c
または
parallel -q debug-call 'a b' {} ::: 'a b' c
接続する前にparallel
(シェルの正しい(希望的に)構文で)パラメータを引用する場所はどこですか?
xargs
シェルを最初に呼び出さない場合は、代わりにGNUを使用できます。
xargs -n1 -r0 -P4 -a <(printf '%s\0' 'a b' c) debug-call 'a b'
これはシェル(または初期化時に実行されるコマンド)を呼び出しませんが、を使用した出力並べ替えなどの追加parallel
機能の利点はありません。parallel
-k
以下で他の方法を見つけることができます。バックグラウンド並列実行