Это зависит главным образом от вашей версии ядра Linux.
Вы должны увидеть ограничение для вашей системы, запустив
getconf ARG_MAX
где указано максимальное количество байтов, которое может иметь командная строка после расширения оболочкой.
В Linux <2.6.23 ограничение обычно составляет 128 КБ.
В Linux> = 2.6.25 ограничение составляет 128 КБ или 1/4 размера стека (см. ulimit -s
), В зависимости от того, что больше.
Смотрите man-страницу execve (2) для всех деталей.
К сожалению, трубопровод ls *.txt
не решит проблему, потому что ограничение находится в операционной системе, а не в оболочке.
Оболочка расширяется *.txt
, затем пытается вызвать
exec("ls", "a.txt", "b.txt", ...)
и у вас есть столько подходящих файлов, *.txt
что вы превышаете ограничение в 128 КБ.
Вам придется сделать что-то вроде
find . -maxdepth 1 -name "*.txt" | wc -l
вместо.
(И см. Комментарии Шона Дж. Гоффа ниже об именах файлов, которые содержат переводы строк.)
ls
вывода «s , что это плохая идея, так что лучше избегать. Для подсчета см. Какой лучший способ подсчитать количество файлов в каталоге? , для хитрого обходного пути посмотрите, почему цикл for не вызывает ошибку «слишком длинный аргумент»? ,