
このリンクを見て質問します「パラメータリストが長すぎます」エラーが発生する方法は?
スレッドで次のコマンドを実行すると、同じエラーが表示されます。
>/bin/echo `perl -e 'print "x" x 1000000'`
/bin/echo: Argument list too long.
echo
ただし、代わりに使用すると、/bin/echo
ARG_MAXを超えてもエラーは発生しません。
>echo `perl -e 'print "x" x 100000000'`
xxxxxxxxxxx...
これは私の環境です。
>which echo; getconf ARG_MAX
/bin/echo
2097152
私はtcshを使用しています。
答え1
違いは、echo
シェルの組み込みファイルですが、/bin/echo
外部実行可能ファイルです。
ARG_MAXは外部バイナリ(execve(2)
.)
シェルで組み込み関数を実行すると、システムはそのような制限を適用せず、シェル自体の制限のみを適用し、ほとんどのシェルは引数を格納するために使用できるメモリ以外に制限を適用しません。
ただし、この場合、externalを実行したときに/bin/echo
実際に到達した制限はARG_MAX_STRLENです。これはARG_MAX_STRLENです。一つパラメータであり、IntelベースのLinuxでは131,072バイトでハードコードされています。バラよりこの回答詳細については。 ARG_MAXはまだすべてのパラメータ(環境変数などを含む)の制限ですが、個々のパラメータはARG_MAX_STRLENによって制限されます。したがって、より短い文字列(132,000文字など)を生成するためにPerl式を短縮しても、この特定の制限にまだ達する必要があります。