同じコマンドの混合結果(ARG_MAX関連)

同じコマンドの混合結果(ARG_MAX関連)

このリンクを見て質問します「パラメータリストが長すぎます」エラーが発生する方法は?

スレッドで次のコマンドを実行すると、同じエラーが表示されます。

>/bin/echo `perl -e 'print "x" x 1000000'`
/bin/echo: Argument list too long.

echoただし、代わりに使用すると、/bin/echoARG_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式を短縮しても、この特定の制限にまだ達する必要があります。

おすすめ記事