पर टर्मिनल ट्रंकिंग लाइनों से उपयोगकर्ता इनपुट पढ़ना एक बैश स्क्रिप्ट में, IFS=$'\n'
सेट करने के बाद अंतर्निहित read
कमांड का उपयोग करके, मैं मानक इनपुट से लाइनों को पढ़ने का प्रयास करता हूं। अगर मैं पढ़ने के लिए इनपुट पेस्ट करता हूं तो लाइनों को 40 9 5 वर्ण सीमा पर छोटा कर दिया जाता है। क्योंकि इस बिल्कुल ठीक काम किया यह सीमा, टर्मिनल से पढ़ने से आने के लिए लगता है:लिनक्स टर्मिनल इनपुट: 4095 वर्ण सीमा
fill=
for i in $(seq 1 94); do fill="${fill}x"; done
for i in $(seq 1 100); do printf "%04d00$fill" $i; done | (read line; echo $line)
मैं अजगर स्क्रिप्ट के साथ एक ही व्यवहार का अनुभव (टर्मिनल से 4095 इनपुट से अधिक समय को स्वीकार नहीं किया है, लेकिन पाइप से स्वीकार किए जाते हैं):
#!/usr/bin/python
from sys import stdin
line = stdin.readline()
print('%s' % line)
यहां तक कि सी कार्यक्रम में एक ही काम करता है, read(2)
का उपयोग कर:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buf[32768];
int sz = read(0, buf, sizeof(buf) - 1);
buf[sz] = '\0';
printf("READ LINE: [%s]\n", buf);
return 0;
}
सभी मामलों में, मैं 4095 के बारे में वर्णों से अधिक प्रवेश नहीं कर सकते। इनपुट प्रॉम्प्ट पात्रों को स्वीकार करना बंद कर देता है।
प्रश्न -1: क्या लिनक्स सिस्टम (कम से कम उबंटू 10.04 और 13.04) में 4095 वर्णों से अधिक टर्मिनल से इंटरैक्टिव रूप से पढ़ने का कोई तरीका है?
प्रश्न -2: यह सीमा कहां से आती है?
सिस्टम प्रभावित: मैं Ubuntu में 10.04/86 और 13.04/86 इस सीमा देखा है, लेकिन Cygwin (हाल के संस्करण कम से कम) 10000 से अधिक अक्षर (के बाद से मैं इस प्राप्त करने की आवश्यकता आगे का परीक्षण नहीं किया था पर अभी तक काट-छांट नहीं करता उबंटू में काम कर रहे स्क्रिप्ट)। टर्मिनल का इस्तेमाल किया गया: वर्चुअल कंसोल और केडीई konsole
(उबंटू 13.04) और gnome-terminal
(उबंटू 10.04)।
हां पाइप के लिए ऐसी सीमा है, और वास्तव में यह ध्यान देने योग्य है कि गैर-इंटरैक्टिव संस्करण पाइप का उपयोग करता है और आवश्यकता से _several लिखता है और reads_ होगा। लेकिन मुझे लगता है कि इस सीमा को टर्मिनल इनपुट को प्रभावित नहीं करना चाहिए (टर्मिनल पाइप नहीं हैं)। – FooF