すべての引数を含むコマンドをすぐに実行するには、xargsをどのように指定しますか?

すべての引数を含むコマンドをすぐに実行するには、xargsをどのように指定しますか?

xargs-n各コマンド実行の最大引数数を指定するオプションがあります。

xargs指定されたすべての引数を含むコマンドを常にすぐに実行するように指定する方法はありますか? (すべての引数を使用せずにコマンドを直接実行するのと同じように、xargsコマンドラインの長さに対するシステム制限による失敗を回避するわけではありません)

以下は私の問題ではありません。注意が気になる場合は無視してください。 私は改行文字を削除して後続のコマンド置換を使用したくないので、代わりに使用することNULを検討しています。xargsただし、複数の実行のパラメータをグループ化したくありません。xargsこれは、xargsが実行するコマンドによって、さまざまなパラメータサブセットを使用した複数の実行の結果が、すべてのパラメータを使用した単一の実行の結果と異なる可能性があるためです。それで、xargs常にすべてのパラメータを同時に実行するように言いたいと思います。

ベストアンサー1

私はまだあなたがしていることを理解していませんが、-xオプション(「コマンドラインが正しくない場合は終了」)と大きな値(システム制限より大きい)に設定されたオプションを-n組み合わせた場合は、次のことを行う必要があります。

a)xargs引数の数に関係なく一度だけ実行します。

b) オペレーティング・システムまたは xargs 内部制限のために単一のコマンドに引数を入れることができない場合、エラーが発生します。

例:

$ seq 1 10000 | xargs -n 100000000 -x sh -c 'echo "$#"' sh
10000
$ seq 1 100000 | xargs -n 100000000 -x sh -c 'echo "$#"' sh
xargs: argument list too long

残念ながら、これはBSDやSolaris xargsでは機能しません。 * BSDでこの-xオプションを使用すると、xargsそのコマンドは終了せずに単一の引数で実行されます。

fz11_2$ jot 10000 1 | xargs -n 10000 -x sh -c 'echo $#' sh | head -3
1
1
1
xargs: sh: terminated with signal 13; aborting

とんでもない小さなパラメータだけが-sトリガされます-x

fz11_2$ jot 10000 1 | xargs -s 19 -n 10000 -x sh -c 'echo $#' sh | head -3
xargs: insufficient space for arguments

これ基準GNU xargsの動作と一致しているようです。

-n  number
      Invoke utility using as many standard input arguments as
      possible, up to number (a positive decimal integer) arguments
      maximum. Fewer arguments shall be used if:
      + The command line length accumulated exceeds the size specified
        by the -s option (or {LINE_MAX} if there is no -s option).
      + The last iteration has fewer than number, but not zero,
        operands remaining.
-x
      Terminate if a constructed command line will not fit in the
      implied or specified size (see the -s option above).

おすすめ記事