引用された引数のGNU並列分割の防止

引用された引数のGNU並列分割の防止

使ってみよう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

以下で他の方法を見つけることができます。バックグラウンド並列実行

おすすめ記事