Oke, Warga. Jadi saya telah menerima batas panjang baris perintah sebagai Injil untuk beberapa waktu. Lantas, apa hubungannya dengan asumsi seseorang? Tentu- periksa mereka.
Saya memiliki mesin Fedora 22 yang dapat saya gunakan (artinya: Linux dengan bash4). Saya telah membuat direktori dengan 500.000 inode (file) di dalamnya masing-masing sepanjang 18 karakter. Panjang baris perintah adalah 9.500.000 karakter. Dibuat demikian:
seq 1 500000 | while read digit; do
touch $(printf "abigfilename%06d\n" $digit);
done
Dan kami mencatat:
$ getconf ARG_MAX
2097152
Catat bagaimanapun saya dapat melakukan ini:
$ echo * > /dev/null
Tapi ini gagal:
$ /bin/echo * > /dev/null
bash: /bin/echo: Argument list too long
Saya bisa menjalankan for loop:
$ for f in *; do :; done
yang merupakan shell builtin lain.
Membaca dokumentasiARG_MAX
dengan cermat untuk status, Panjang maksimum argumen ke fungsi exec . Artinya: Tanpa menelepon exec
, tidak ada ARG_MAX
batasan. Jadi itu akan menjelaskan mengapa bawaan shell tidak dibatasi oleh ARG_MAX
.
Dan memang, saya dapat ls
direktori saya jika daftar argumen saya adalah 109948 file, atau sekitar 2.089.000 karakter (memberi atau menerima). Setelah saya menambahkan satu lagi file nama file 18 karakter, maka saya mendapatkan kesalahan daftar Argument terlalu panjang . Begitu ARG_MAX
juga bekerja seperti yang diiklankan: exec gagal dengan lebih dari ARG_MAX
karakter pada daftar argumen - termasuk, harus dicatat, data lingkungan.