Хорошо, жители. Так что я уже довольно давно принял ограничения на длину командной строки как евангелие. Итак, что делать со своими предположениями? Естественно - проверьте их.
В моем распоряжении есть машина с Fedora 22 (имеется в виду Linux с bash4). Я создал каталог с 500 000 инодов (файлов), каждый из которых имеет длину 18 символов. Длина командной строки составляет 9 500 000 символов. Создано таким образом:
seq 1 500000 | while read digit; do
touch $(printf "abigfilename%06d\n" $digit);
done
И отметим:
$ getconf ARG_MAX
2097152
Обратите внимание, что я могу сделать это:
$ echo * > /dev/null
Но это не удается:
$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long
Я могу запустить цикл for:
$ for f in *; do :; done
это еще одна встроенная оболочка.
Внимательное чтение документации поARG_MAX
состояниям. Максимальная длина аргумента для функций exec . Это означает: без звонка exec
нет ARG_MAX
ограничений. Это объяснило бы, почему встроенные функции оболочки не ограничиваются ARG_MAX
.
И действительно, я могу использовать ls
свой каталог, если мой список аргументов содержит 109948 файлов или около 2 089 000 символов (плюс-минус). Однако как только я добавляю еще один 18-значный файл с именем файла, я получаю слишком длинный список аргументов . Итак ARG_MAX
, работает так, как заявлено: exec не работает с более чем ARG_MAX
символами в списке аргументов, включая, следует отметить, данные среды.