gnome-terminalのコマンドライン引数の最大長は?


回答:


32

xargs知っている。私のシステムでは、

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072

5
これを拡張するために、制限は端末ではなく、カーネルにあります(シェルにもありますが、デフォルトのシェル(bash)の制限はカーネルの制限と同じくらい高いと思います)。また、xargs制限を報告するためだけでなく、(主に)回避するためにもあります。manページまたは他のドキュメントを参照してください。
ジル「SO-悪であるのをやめる」

1
特に「実際に使用できる」出力があるため、この回答が好きです...少し手を加えて、「実際の」値を分離するためにこのコマンドバリアントを考え出しました...(もっと簡単な方法があるかもしれませんが、しかし、ちょっと、それは動作し、スクリプトに適しています:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

奇妙なことに、xargsはPOSIX制限(POSIX制限= ARG_MAX-2048(ヘッドルーム)-envvars)の環境制限を二重にカウントしているようです。
東武

18

答えはsysconf値にありますARG_MAX。システムで確認するには:

getconf ARG_MAX

私にとって、これは報告し2097152ます。詳細については、マンページを確認してください。

man sysconf

これをプログラム内で取得するには、たとえば:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));

1
ありがとうKC .. +1; 絶対MAXを取得するためのきちんとした方法が、私は、実行時の値(私は:(ことを言及しなかった後に実際にあったように私は...、その「実際に利用可能な」要因のxargsの方法を優先しました
ピーター.O

0

私は実際にはgnome-terminalについては知りませんが、シェルには「固定」制限はありませんが、スタックの制限はあります。

ただし、引数ごとに128KBのハードコード制限があり、「非常に非常に長い引数...」を使用しない場合は問題になりません。

詳細については、こちらをご覧ください。

http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.