解決策 1:
シェル/OS に課される制限は、通常、10 万または 20 万文字です。
getconf ARG_MAX
コマンドの最大入力制限を示します。 Debian システムでは、現在これで端末を開いていますが、131072
が返されます これは 128*1024
です .制限は環境変数によって削減され、私の記憶が正しければ、これらはシェルによって同じ構造に渡されますが、ほとんどの場合、数百文字しか取り除かれません。この値の近似値を見つけるには、env | wc -c
を実行します - これは、このマシンのこのログインで現時点で 325 文字であることを示唆しています。
スクリプトはこの完全な長さを許可する可能性がありますが、他のユーティリティが意図的に、または設計上の問題によって独自の制限を課す可能性は低くありません。また、長いコマンド ラインの個々の引数の長さ、および/またはファイルへのパスの長さに人為的な制限がある場合もあります。
解決策 2:
ARG_MAX は確かにコマンド ラインと環境の合計サイズを制限しますが、追加の制限に直面しています:1 つの引数は MAX_ARG_STRLEN より長くしてはなりません (残念ながら 131072 にハードコードされています)。
https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument を参照
解決策 3:
最長の可変長は何ですか?これを理解するには、perl の "x" を使用して非常に長い変数名を作成します:
VAR=`perl -e 'print "a"x131071'` ; bash a.sh $VAR
私のシステムでは 131071 が動作します:
変数は 131072 に出力されますが、大きすぎます:
VAR=`perl -e 'print "a"x131072'` ; bash a.sh $VAR
bash: /bin/bash: Argument list too long