Какова максимальная длина аргументов командной строки в 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не только для сообщения о пределе, но также (главным образом) для его обхода - см. Справочную страницу или другую документацию.
Жиль "ТАК - перестань быть злым"

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

Ответ исходит из значения sysconfARG_MAX . Чтобы проверить это в вашей системе:

getconf ARG_MAX

Для меня это отчеты 2097152. Для более подробной информации проверьте man-страницу:

man sysconf

Чтобы получить это внутри программы, например:

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

1
Спасибо КЦ .. +1; отличный способ получить абсолютный MAX, но я предпочел метод xargs из-за его фактического «доступного» фактора ... как я был на самом деле после значения времени выполнения (но я не упоминал об этом :(
Питер .O

0

Я действительно не знаю о gnome-Terminal, но оболочка имеет не «фиксированный» предел, а предел стека.

Однако существует ограничение жесткого аргумента для каждого аргумента, равное 128 КБ, что не должно быть проблемой, если вы не используете «очень очень очень длинные аргументы ....».

Вы можете прочитать больше об этом здесь:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.