Tamam, Denizens. Bu yüzden uzun bir süredir komut satırı uzunluk sınırlarını müjde olarak kabul ettim. Öyleyse, kişinin varsayımlarıyla ne yapılmalı? Doğal olarak kontrol edin.
Elimde bir Fedora 22 makinesi var (anlamı: bash4 ile Linux). Her biri 18 karakter uzunluğunda 500.000 düğüm (dosya) içeren bir dizin oluşturdum. Komut satırı uzunluğu 9.500.000 karakterdir. Bu şekilde oluşturuldu:
seq 1 500000 | while read digit; do
touch $(printf "abigfilename%06d\n" $digit);
done
Ve şunu not ediyoruz:
$ getconf ARG_MAX
2097152
Ancak şunu yapabilirim:
$ echo * > /dev/null
Ancak bu başarısız olur:
$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long
Bir for döngüsü çalıştırabilirim:
$ for f in *; do :; done
başka bir kabuk yerleşik olan.
Durumlar için belgelerinARG_MAX
dikkatli okunması , exec işlevlerine maksimum argüman uzunluğu . Bu şu anlama gelir: Aramadan exec
, ARG_MAX
sınırlama yoktur . Bu yüzden kabuk yerleşiklerinin neden kısıtlanmadığını açıklayabilir ARG_MAX
.
Ve gerçekten, ls
bağımsız değişken listem 109948 dosya uzunluğunda veya yaklaşık 2.089.000 karakter (ver veya al) ise dizinimi yapabilirim. Yine de 18 karakterlik bir dosya adı dosyası ekledikten sonra, Argüman listesi çok uzun bir hata alıyorum. Yani ARG_MAX
reklamı olarak çalışıyor: exec daha fazlası ile başarısız oluyor ARG_MAX
dahil listesi-argüman üzerinde karakterlerin, bu, çevre verilerini unutulmamalıdır.