सूक्ति-टर्मिनल में कमांड लाइन के तर्कों की अधिकतम लंबाई क्या है?


38

सूक्ति-टर्मिनल में कमांड लाइन के तर्कों की अधिकतम लंबाई क्या है?

... और क्या कोई सिस्टम वातावरण चर है जो इस मान की रिपोर्ट करता है?


जवाबों:


32

xargsजानता है। मेरे सिस्टम पर,

$ xargs --show-limits
Your environment variables take up 2572 bytes
POSIX upper limit on argument length (this system): 2092532
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2089960
Size of command buffer we are actually using: 131072

5
इस पर विस्तार करने के लिए, सीमा टर्मिनल में नहीं है, यह कर्नेल में है (और शेल में भी, लेकिन मुझे लगता है कि डिफ़ॉल्ट शेल (बैश) की सीमा कर्नेल सीमा जितनी अधिक है)। इसके अलावा, xargsयह केवल सीमा की रिपोर्टिंग के लिए नहीं है, यह (मुख्य रूप से) इसके चारों ओर काम करने के लिए भी है - मैन पेज या अन्य प्रलेखन देखें।
गाइल्स का SO- बुराई पर रोक '22

1
मुझे यह उत्तर पसंद है, विशेष रूप से "वास्तव में" आउटपुट का उपयोग कर सकता है ... मैंने इसके साथ थोड़ा जुड़ाव किया है और "वास्तव में" मूल्य को अलग करने के लिए इस कमांड संस्करण के साथ आया है ... (शायद एक सरल तरीका है) लेकिन हे, यह काम करता है और एक स्क्रिप्ट के लिए उपयुक्त है:xargs --show-limits --no-run-if-empty < /dev/null 2>&1 |sed -n "/could actually use/s/.*: \\([0-9]\+\\)/\1/p"
पीटर।

अजीब बात है, xargs POSIX सीमा (POSIX limit = ARG_MAX - 2048 (हेडरूम) - envvars) में पर्यावरण सीमा को दोगुना करने के लिए लगता है।
तोबू

18

जवाब sysconf मान से आता है ARG_MAX। अपने सिस्टम पर इसकी जांच करने के लिए:

getconf ARG_MAX

मेरे लिए, यह रिपोर्ट 2097152। अधिक जानकारी के लिए मैनपेज की जाँच करें:

man sysconf

उदाहरण के लिए, इसे प्रोग्राम के अंदर लाने के लिए:

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));

1
धन्यवाद केसी .. +1; पूर्ण MAX प्राप्त करने का एक अच्छा तरीका है, लेकिन मैंने इसके "वास्तव में उपलब्ध" कारक के कारण xargs पद्धति को प्राथमिकता दी है ... जैसा कि मैं वास्तव में एक रन-टाइम मूल्य के बाद था (लेकिन मैंने उल्लेख नहीं किया कि :(
पीटर .O

0

मैं वास्तव में ग्नोम-टर्मिनल के बारे में नहीं जानता, लेकिन शेल में 'निश्चित' सीमा नहीं है, लेकिन स्टैक की सीमा है।

हालाँकि, एक हार्डकोड सीमा प्रति-तर्क है जो 128KB है, अगर आपको 'बहुत बहुत लंबे तर्क ....' का उपयोग नहीं करना चाहिए तो यह समस्या नहीं होनी चाहिए।

यहां आप इस बारे में और अधिक पढ़ सकते हैं:

http://www.mail-archive.com/bug-make@gnu.org/msg05522.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.