GNOME-terminalindeki komut satırı argümanlarının maksimum uzunluğu nedir?


Yanıtlar:


32

xargsbilir. Benim sistemimde

$ 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
Bunu genişletmek için, sınır terminalde değil, çekirdeğin içinde (ve kabuğun içinde de var, ancak bence varsayılan kabuğun (bash) sınırının çekirdek sınırı kadar yüksek olduğunu düşünüyorum). Ayrıca, xargsyalnızca sınırı bildirmek için değil, aynı zamanda (öncelikle) bunun üzerinde çalışmak için de geçerlidir - man sayfasına veya diğer belgelere bakın.
Gilles 'SO- kötülük'

1
Bu cevabı seviyorum, özellikle de "gerçekten kullanabileceği" çıktısı nedeniyle ... Biraz eğildim ve "aslında" değerini izole etmek için bu komut türeviyle geldim ... (belki daha basit bir yol var, ama hey, işler ve bir komut dosyası için uygundur:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Peter.O

Garip bir şekilde, xargs POSIX sınırındaki çevre sınırını iki kat sayıyor gibi görünüyor (POSIX sınırı = ARG_MAX - 2048 (tavan boşluğu) - envvars).
Tobu

18

Cevap, sysconf değerinden gelir ARG_MAX. Sisteminizde incelemek için:

getconf ARG_MAX

Benim için bu raporlar 2097152. Daha fazla ayrıntı için kılavuza bakınız:

man sysconf

Bunu bir programın içine almak için, örneğin:

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

1
Teşekkürler KC .. +1; mutlak MAX'ı elde etmek için güzel bir yol, ancak "aslında mevcut" faktörü nedeniyle xargs yöntemini tercih ettim ... çünkü bir çalışma zamanı değerinden sonra olduğum için (ancak şunu söylemedim :(
Peter .O

0

GNOME terminalini gerçekten bilmiyorum, fakat kabuğun 'sabit' bir limiti yok, ancak yığının limiti var.

Bununla birlikte, 128KB olan bir argüman başına bir sabit kod sınırı vardır, eğer 'çok çok uzun argümanlar kullanmazsanız' sorun olmamalıdır.

Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.