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).