ठीक है, डेनिज़ेंस। इसलिए मैंने काफी समय तक कमांड लाइन की लंबाई को सुसमाचार के रूप में स्वीकार किया है। तो, किसी की धारणाओं का क्या करें? स्वाभाविक रूप से- उन्हें जांचें।
मेरे पास अपने निपटान में एक फेडोरा 22 मशीन है (जिसका अर्थ है: bash4 के साथ लिनक्स)। मैंने १। अक्षरों में से प्रत्येक में ५००,००० इनकोड (फाइलें) के साथ एक निर्देशिका बनाई है। कमांड लाइन की लंबाई 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 f in *; do :; done
जो एक अन्य शेल बिलिन है।
राज्यों के लिए प्रलेखनARG_MAX
का सावधानीपूर्वक पढ़ना , निष्पादन कार्यों के लिए तर्क की अधिकतम लंबाई । इसका मतलब है: कॉल किए बिना exec
, कोई ARG_MAX
सीमा नहीं है । इसलिए यह समझाता है कि शेल बिल्डरों को प्रतिबंधित क्यों नहीं किया जाता है ARG_MAX
।
और वास्तव में, मैं ls
अपनी निर्देशिका कर सकता हूं यदि मेरी तर्क सूची 109948 फाइलें लंबी है, या लगभग 2,089,000 अक्षर (दे या ले) हैं। एक बार जब मैं एक और 18-अक्षर फ़ाइल नाम फ़ाइल जोड़ देता हूं, तो मुझे एक तर्क सूची बहुत लंबी त्रुटि मिलती है । इसलिए ARG_MAX
विज्ञापित के रूप में काम कर रहा है: निष्पादन ARG_MAX
सूची में अक्षरों से अधिक के साथ निष्पादन विफल हो रहा है- सहित, यह ध्यान दिया जाना चाहिए, पर्यावरण डेटा।