Nó phụ thuộc chủ yếu vào phiên bản kernel Linux của bạn.
Bạn sẽ có thể thấy giới hạn cho hệ thống của mình bằng cách chạy
getconf ARG_MAX
cho bạn biết số byte tối đa mà một dòng lệnh có thể có sau khi được shell mở rộng.
Trong Linux <2.6,23, giới hạn thường là 128 KB.
Trong Linux> = 2.6.25, giới hạn là 128 KB hoặc 1/4 kích thước ngăn xếp của bạn (xem ulimit -s
), tùy theo giá trị nào lớn hơn.
Xem trang man execve (2) để biết tất cả các chi tiết.
Thật không may, đường ống ls *.txt
sẽ không khắc phục được sự cố, vì giới hạn nằm trong hệ điều hành chứ không phải vỏ.
Vỏ mở rộng *.txt
, sau đó cố gắng gọi
exec("ls", "a.txt", "b.txt", ...)
và bạn có rất nhiều tệp khớp với nhau *.txt
mà bạn vượt quá giới hạn 128 KB.
Bạn sẽ phải làm một cái gì đó như
find . -maxdepth 1 -name "*.txt" | wc -l
thay thế.
(Và xem ý kiến của Shawn J. Goff bên dưới về tên tệp có chứa dòng mới.)
ls
, đó là một ý tưởng tồi, vì vậy tốt hơn nên tránh nó. Để đếm, xem cách tốt nhất để đếm số lượng tệp trong một thư mục là gì? , đối với một cách giải quyết khó khăn, hãy xem tại sao vòng lặp không nâng cao đối số của Google quá lâu? .