1

任意の/異なるコマンド (さまざまなバイナリ/実行可能ファイルと引数) の長いリストを提供し、xargs でそれらのコマンドを並行して実行できるようにしたいと考えています (xargs -P)。

引数のみを変更する場合は、 xargs -P fine を使用できます。私が苦労しているのは、実行可能ファイルと引数を変更したいときです。

例: command-list.txt

% cat command-list.txt
binary_1 arg_A arg_B arg_C 
binary_2 arg_D arg_E
.... <lines deleted for brevity>
binary_100 arg_AAA arg_BBB

% xargs -a command-list.txt -P 4 -L 1
 ** I know the above command will only echo my command-list.txt **

私は GNU 並列を認識していますが、今のところ xargs しか使用できません。また、ホストが一度に処理するには多すぎる可能性があるため、すべてのコマンドをバックグラウンドにすることもできません。

解決策はおそらく私の顔を見つめています。前もって感謝します!

4

1 に答える 1

3

parallel にアクセスできない場合、解決策の 1 つは、コマンドで sh をパラメーターとして使用することです。

例えば:

xargs -a command-list.txt -P 4 -I COMMAND sh -c "COMMAND"

sh の -c は基本的に、指定された文字列を実行するだけです (ファイルを探すのではなく)。マニュアルページの説明は次のとおりです。

-c string   If  the  -c  option  is  present, then commands are read from
            string.  If there are arguments after the  string,  they  are
            assigned to the positional parameters, starting with $0.

また、xargs の -I は、一度に 1 つのコマンド (-L 1 など) を実行し、パラメーター (この場合は COMMAND) を検索して、xargs によって処理されている現在の行に置き換えるように指示します。マニュアルページの情報は次のとおりです。

-I replace-str
            Replace occurrences of replace-str in the initial-arguments with
            names read from standard input.  Also, unquoted  blanks  do  not
            terminate  input  items;  instead  the  separator is the newline
            character.  Implies -x and -L 1.

sh は、引用符 (") を含むコマンドに対して非常に寛容であるように思われるため、それらをエスケープされた引用符に正規表現する必要はないようです。

于 2013-11-22T22:17:52.077 に答える