Яка максимальна довжина аргументів командного рядка в gnome-terminal?


38

Яка максимальна довжина аргументів командного рядка в 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" або іншу документацію.
Жил "ТАК - перестань бути злим"

1
Мені подобається ця відповідь, особливо через те, що "міг би реально використовувати" вихід ... Я трохи здригнувся з цим і придумав цей варіант команди, щоб виділити значення "насправді" ... (можливо, є більш простий спосіб, але ей, це працює і підходить для сценарію:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
Пітер.O

Як не дивно, схоже, що xargs подвоює ліміт оточення в межі POSIX (ліміт POSIX = ARG_MAX - 2048 (заголовок) - envvars).
Тобу

18

Відповідь виходить зі значення sysconfARG_MAX . Щоб переглянути його у вашій системі:

getconf ARG_MAX

Для мене це повідомляє 2097152. Для отримання більш детальної інформації перегляньте сторінку сторінки:

man sysconf

Щоб отримати це всередині програми, наприклад:

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

1
Спасибі KC .. +1; акуратний спосіб отримати абсолютний MAX, але я віддав перевагу методу xargs через його "фактично доступний" фактор ... як я був насправді після значення часу виконання (але я не згадував про це :(
Peter .О

0

Я насправді не знаю про gnome-термінал, але оболонка має не "фіксований" межа, а межа стека.

Однак є обмеження на аргумент жорсткого коду, що становить 128 КБ, це не повинно бути проблемою, якщо ви не використовуєте "дуже дуже дуже довгі аргументи ....".

Детальніше про це ви можете прочитати тут:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.