एन्टरलाइन के बजाय एंटर दबाने से ^ M बनता है


94

उदाहरण के लिए, अगर मैं tail -fएक फ़ाइल या readआईएनजी उपयोगकर्ता इनपुट हूँ, तो टर्मिनल को समाप्त करने या stdout में एक नई पंक्ति जोड़ने के बजाय <Enter>उत्पादन करेगा । ठीक काम करता है।^Mread^J

मैं sshubuntu प्रणाली में हूँ , अगर वह मायने रखता है। यह मेरे लिए zsh और bash दोनों में होता है। एक समाधान के साथ मैं remapping है खेला ^Mकरने के लिए ^Jzsh में है, लेकिन यह है कि यह जड़ समस्या को ठीक नहीं होगा लगता है। किसी को पता है कि यह क्या कारण हो सकता है?

संपादित करें: कुछ सवालों के जवाब देने के लिए, मैं sshOSX से Ubuntu में प्रवेश कर रहा हूं । मैं iTerm और zsh का उपयोग कर रहा हूं। मैं यह भी उल्लेख करना भूल गया कि मैं Ubuntu मशीन पर tmux का उपयोग कर रहा हूं।

संपादित करें 2: एक प्रश्न याद किया। जब मैं टाइप करता Ctrl-V Enterहूं तो मुझे ^M(OSX और Ubuntu दोनों पर) मिलता है।

संपादित करें 3: पर OSX और उबंटू echo $TERMका उत्पादन screen-256color


क्या आप उबंटू में ssh का उपयोग कर रहे हैं?
तसोस

हाँ --- और किस ओएस से? यह एक TERM समस्या है।
रमनो

आप यदि आप प्रकार क्या मिलता है Ctrl + V के बाद दर्ज ? जैसा कि आप कमांड को ठीक से निष्पादित करने में सक्षम हैं, यह निश्चित रूप से शेल की समस्या नहीं है।
अडापोहन

2
मेरे OSX बॉक्स के एक (अनैच्छिक) पुनः आरंभ ने इस मुद्दे को तय कर दिया है ... मुझे लगता है कि यह उनमें से एक है। उम्मीद है कि यह अच्छे के लिए चला गया है।
बेनेकास्ताह

मेरे लिए भी केवल एक ही चीज है जो एनवीआरएएम की मंजूरी सहित एक पुनरारंभ था। स्टार्टअप ध्वनि सुनने के तुरंत बाद कमांड-ऑप्शन-पीआर कीज़ को दबाकर रखें और OSX के NVRAM को भी रीसेट करें
jonbros

जवाबों:


192

यदि किसी और के पास यह समस्या है, तो यह TERM समस्या के बजाय स्टेंट टर्मिनल लाइन सेटिंग की समस्या है। यदि आपके साथ ऐसा दोबारा होता है, तो दौड़ने का प्रयास करें stty saneऔर हमें बताएं कि क्या इसे ठीक करता है।


22
यह OS X पर भी काम करता है।
पैट्रिक बर्कले

1
मेरे लिए काम किया (मिंट 17.1)।
Deleet

1
उबंटू बायोनिक पर काम
protoEvangelion

Mojave पर iTerm2 पर अच्छी तरह से काम करता है
Rakib

मेरी किटी पर आर्कल्विनक्स के लिए काम किया
युकशिमा हक्साय

31

stty -aअपनी टर्मिनल सेटिंग देखने के लिए दौड़ने का प्रयास करें । मेरा संदेह यह है कि आपकी icrnlसेटिंग सेट नहीं है और इसे दिखाया जाएगा -icrnl(माइनस साइन का मतलब है कि यह बंद हो गया है) इसकी सामान्य सेटिंग ऑन रहने के बजाय। जब मैं लॉग इन करता हूं तो मेरा टर्मिनल सामान्य रूप से कैसे सेट किया जाता है:

$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

और मुझे लाइन एंडिंग से कोई समस्या नहीं है: या तो रिटर्न (^ M) या एंटर (^ J) इनपुट लाइनों को समाप्त करेगा। लेकिन अगर मैं बंद icrnlकर देता हूं तो ^ एम कोड हर बार दिखाई देता है जब मैं एक प्रोग्राम से बात कर रहा हूं और हिट दर्ज करता हूं:

$ stty -icrnl
$ read line
Line of text^M^M^M^M
$ stty -a
speed 38400 baud; rows 45; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

कोड का icrnlअर्थ है, "गाड़ी नई दिशाओं में लौटती है" और चल रहे कार्यक्रम से छुपाता है कि आप टाइप कर रहे हैं ^ एम जब यूनिक्स वास्तव में ^ जे। पुराने कीबोर्ड में एक अलग रिटर्न और एंटर कुंजी होती थी (जहां रिटर्न आम तौर पर एक फॉर्म के माध्यम से आपको उन्नत करता है और इसे सबमिट किया जाता है), लेकिन आज हमारे पास आम तौर पर केवल एक पंक्ति-अंत कुंजी है और इसलिए यह टर्मिनल सेटिंग दो अर्थों को संयोजित करने में मदद करती है।

stty icrnlकमांड को अपने में जोड़ें .profileया .bashrcयदि आप पाते हैं कि यह वास्तव में समस्या सेटिंग है।

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