テクノロジー · 実用ガイド
Linux の「Argument list too long」?分割前に argv と環境のバイト数を測る
E2BIG は argv と環境の合計、一つの長すぎる文字列、またはラッパーが作った巨大な引数で起きます。境界を分類し、名前を壊さない有界な転送を選びます。

E2BIG は argv と環境の合計、一つの長すぎる文字列、またはラッパーが作った巨大な引数で起きます。境界を分類し、名前を壊さない有界な転送を選びます。
E2BIG は argv と環境の合計、一つの長い文字列、その他の exec 経路制限を含みます。
1. 失敗した exec を固定する
glob を置き換える前に正確なコマンド、shell、作業ディレクトリ、エラーを保存します。小さな代表展開と生成スクリプトまたは make 規則を記録し、大量の名前を別の診断コマンドへ再投入しません。
対象プログラムが始まる前に shell が報告したか確認します。アプリのログやプロセスが無ければ、失敗は rm や cp の内部ではなく exec 境界です。
2. 全バイト予算を測る
getconf ARG_MAX、stack 制限、環境のバイト数、引数数、推定 argv バイト、最長文字列を記録します。失敗した service、container、CI、scheduler と同じ環境で測ります。
値は予算であって保証ではありません。Linux は終端 NUL とポインタ費用を数え、環境も新プロセスへ渡します。合計が ARG_MAX 未満に見えても一引数で失敗できます。
3. 失敗形状を分類する
三つに分けます。多数の通常項目が合計を使い切る、一つのパスや生成 command が文字列上限を超える、wrapper が全規則を一つの sh -c 引数へ入れる、です。巨大な継承環境は第四の枝です。
最初からファイル数だけを疑いません。試験用環境変数を短くし、最長項目を調べ、無害な command で再現してから本番処理を変えます。
4. 安全な転送を選ぶ
位置が合うなら find -exec utility … {} +、または find -print0 と xargs -0 を使います。GNU xargs では --show-limits を確認し、保守的な -s を指定できます。
改行区切りの名前を xargs に渡さず、command substitution で巨大一覧を再構築しません。標準入力、manifest、response file を受ける API なら一つの論理操作を保ちやすい場合があります。
5. バッチ結果を証明する
空白、改行、先頭ハイフン、最長名を含む非破壊サンプルで試します。機密パスを出さず、各呼び出し、終了値、件数を記録します。
入力数と処理数が一致し、全エラーが見え、全バッチが予算内で、中断後に永続的な残件から再開できる時だけ受け入れます。破壊操作にはバックアップも必要です。
