बश में डिफ़ॉल्ट कॉपी और पेस्ट व्यवहार को अक्षम करें


9

जब मैं अपने टर्मिनल सत्र में पेस्ट करता हूं, तो शेल तुरंत कमांड को निष्पादित करता है मेरे बिना एंटर कुंजी दबाए।

मैं वास्तव में नहीं जानता कि उस व्यवहार को कैसे निष्क्रिय किया जाए।

मैं MacOS Yosemite पर प्रीइंस्टॉल्ड टर्मिनल का उपयोग कर रहा हूं।


9
यह केवल निश्चित रूप से करता है, अगर पेस्ट बफर में एक नई रेखा होती है। इसका (लगभग) बैश से कोई लेना देना नहीं है। (यह केवल तभी पढ़ता है, जब तक कि वह पठन-पाठन पुस्तकालय का उपयोग करता है।)
पीटर -

... और अभी तक bash(की मदद से readline) एक तय है।
एलेक्सिस

जवाबों:


16

साथ bash4.4 या नए और टर्मिनलों में कोष्ठकों के भीतर है कि समर्थन एक ला पेस्ट xterm, तो आप कर सकते हैं:

bind 'set enable-bracketed-paste'

(या set enable-bracketed-pasteअपने में जोड़ें ~/.inputrc)

इसका कारण यह होगा कि कॉपी-पेस्ट बफ़र को वर्णों के बजाय प्रॉम्प्ट पर डाला जाएगा क्योंकि इसकी व्याख्या की जाएगी जैसे कि टाइप किया गया है (आपको अभी भी समस्या हो सकती है यदि उस बफ़र में वर्ण हों ^C, ^Zऔर आपका टर्मिनल एमुलेटर उन्हें फ़िल्टर नहीं करता है) ।

zsh संस्करण 5.1 के बाद से डिफ़ॉल्ट रूप से ऐसा होता है।

अन्य गोले या टर्मिनलों के लिए, यह भी देखें: मैं इस तरह के क्लिपबोर्ड दुरुपयोग से खुद को कैसे बचा सकता हूं?


मैं ठीक से
देखूंगा

बूथ के तरीके काम करने के लिए प्रतीत नहीं होते हैं
ओपलड्स

@ ओह, आपने क्या प्रयास किया? किस शेल के किस संस्करण के साथ और किन टर्मिनलों पर? मैं बीईएल ओएस / एक्स के साथ भी जहाज करता xtermहूं, आप इसके बजाय कोशिश कर सकते हैं। क्या आपने perlलिंक किए गए प्रश्न पर स्क्रिप्ट की कोशिश की है ?
स्टीफन चेजलस

1
@Opaldes, मैक ओएस एक्स OS / X टर्मिनल पर टर्मिनल विंडो में कोडिंग पेस्ट के अनुसार OS / X Lion के बाद से ब्रैकेटेड पेस्ट का समर्थन करता है। तो यह लगता है कि आप सभी की जरूरत zsh या बैश का एक हालिया पर्याप्त संस्करण है। पुराने zsh संस्करणों के साथ, जिसे कॉन्फ़िगरेशन के माध्यम से भी प्राप्त किया जा सकता है।
स्टीफन चेजलस

1
हम इस उपयोगी सुविधा को बैश / रीडलाइन में शामिल करने के लिए डैनियल कॉलैसिएन को धन्यवाद दे सकते हैं: gnu-bash.2382.n7.nabble.com/…
एंथनी

6

यह तब होता है जब आप एक "न्यूलाइन" चरित्र पेस्ट करते हैं। उदाहरण के लिए, यदि आप कई लाइनें चिपका रहे हैं या आप अनजाने में लाइन के अंत में एक गाड़ी वापसी की नकल करते हैं। AFAIK वास्तव में इस व्यवहार को अक्षम करने का कोई तरीका नहीं है लेकिन इसे कम करने के तरीके हैं।

सबसे आसान तरीका यह है कि एक बार में सिर्फ एक लाइन को कॉपी करें और आखिरी कैरेक्टर को मिस कर दें, इसे बाद में मैन्युअल रूप से जोड़ दें।

या, जैसा कि the_velour_fog नीचे इंगित करता है, आप इसे एक ऐसे संपादक में भी पेस्ट कर सकते हैं जो गैर-मुद्रित वर्ण दिखाता है और नई रेखा के बिना पुनः सेट होता है।

GNU / Linux डिस्ट्रोस के लिए एक या दो वर्कअराउंड तैर रहे हैं, लेकिन कोई विचार नहीं है अगर अवधारणा को MacOS पर पोर्ट किया जा सकता है। भले ही, यहां एक नज़र डालें और देखें कि क्या मैक में एक समान फ़ाइल है जिसे आप बदल सकते हैं। दुर्भाग्य से, मुझे संदेह है।


मैं इसे एक संपादक में पेस्ट करता हूं जो गैर-मुद्रित वर्ण दिखाता है, फिर बिना नई रेखा के फिर से
आना

शामिल करने के लिए अच्छा सुझाव, संपादित किया गया।
I_GNU_it_all_along

यह जानकर अच्छा लगा कि यह हर समय नहीं होता है। मैंने आपके उत्तर को बदल दिया लेकिन यह मेरे लिए एक समाधान के रूप में अधिक उपयोगी है।
11

यह एक दर्द है, लेकिन आदेशों की एक श्रृंखला की नकल करते समय उपयोगी हो सकता है।
I_GNU_it_all_along

मेरा "समाधान" भी एक हैक वर्कअराउंड की तरह है, लेकिन यह अलग से चुनने से तेज है, IMO।
पीटर कॉर्ड्स

5

चिपकाने से पहले, एक-उद्धरण टाइप करें , फिर पेस्ट करें। नियंत्रण-सी और ऊपर-तीर इसे एक विशाल रेखा के रूप में संपादित करने के लिए।

डबल-कोट्स भी काम करते हैं, यदि टेक्स्ट में सिंगल हो लेकिन डबल कोट्स नहीं हों। यह ठीक है अगर इसमें कुछ $या अन्य चीजें हैं जो दोहरे उद्धरण चिह्नों के अंदर विस्तृत होती हैं, क्योंकि आप वास्तव में एक आदेश के रूप में उद्धृत विशाल रेखा नहीं चला रहे हैं।


आप वास्तव में पूरी बात को वहीं संपादित नहीं कर सकते हैं, क्योंकि न्यूलाइन्स एक लंबी लंबी लाइन बनाने के बजाय एक निरंतर संकेत (आधिकारिक शब्दावली नहीं) शुरू करती है।

दी गई ये 4 पंक्तियाँ:

echo
ls
foo
bar

मेरे सुझाव के अनुसार चिपकाने से आपकी स्क्रीन पर इसका परिणाम आएगा:

$ 'echo 
> ls
> foo
> bar        <or cursor here if you didn't include a trailing newline
> [cursor here]

फिर आप नियंत्रण-सी और ऊपर-तीर दबा सकते हैं। (नियंत्रण-सी, कर्सर के समान रेखा पर सब कुछ नष्ट कर देता है, इसलिए वहां उपयोगी पाठ होने पर सबसे पहले रिटर्न दबाएँ।)

एक विकल्प यह है कि उद्धरण को बंद करें और वापसी को दबाएं, फिर ऊपर-तीर।

वैसे भी, ऊपर-तीर के बाद

$ 'echo
ls
foo
bar

नियंत्रण-और अग्रणी को हटा दें '। पेस्ट ब्लॉक (शब्दों द्वारा) के माध्यम से जल्दी से स्थानांतरित करने के लिए नियंत्रण-बाएं और नियंत्रण-दाएं का उपयोग करें। या यदि आपका टर्मिनल सेटअप नियंत्रण-तीर-कुंजी, alt-b और alt-f का समर्थन नहीं करता है।


शाब्दिक newlines वास्तव में अलग-अलग कमांड करते हैं, और ये 4 लाइनें अलग से आपके कमांड इतिहास में जाएंगी । आप उन्हें ;या में बदलना चाह सकते हैं &&। (मैं इसके लिए एक चाल नहीं जानता, बस आगे या पीछे-शब्द के लिए कुंजी-दोहराने का उपयोग करें ताकि जल्दी से वहां पहुंच सकें और इसे मैन्युअल रूप से कर सकें।)


2

ऐसा इसलिए होता है क्योंकि आपका पेस्ट एक न्यूलाइन के साथ समाप्त होता है, और टर्मिनल एमुलेटर मूल रूप से पेस्ट को चरित्र द्वारा बैश करने के लिए खिलाते हैं। इस प्रक्रिया में, बैश वास्तव में एक मशीन से मानव टाइपिस्ट को नहीं जानता है।

मैं आमतौर पर कॉपी-पेस्ट करते समय केवल अतिरिक्त ध्यान देता हूं कि इसमें एक नई रेखा शामिल नहीं है, लेकिन एक चाल है जिसे आप कोशिश कर सकते हैं: पेस्ट करने से पहले, बैश में, टाइप करें C-x C-e। इसे $EDITORखाली फाइल के साथ लॉन्च करना चाहिए । जो कुछ भी आप उस फ़ाइल में सहेजते हैं और बाहर निकलते हैं, बैश निष्पादित होगा। तो अब आप संपादक को अपनी कमांड पेस्ट कर सकते हैं, संभवतः चीजों को और अधिक हेरफेर कर सकते हैं और फिर उन सभी को एक बार में चला सकते हैं।


-1

मैं कंपनी से संबंधित नहीं हूं, मैं बहुत संतुष्ट ग्राहक हूं। : इस टर्मिनल प्रोग्राम का प्रयास करें http://www.emtec.com/zoc/index.html । मैक संस्करण भी उपलब्ध है।

यदि मैं इस उत्तर के साथ उल्लंघन करता हूं तो कोई भी एसई नियम मुझे बताएं और मैं उत्तर हटा दूं।

संपादित करें:

जब मैंने अन्य उत्तरों को सही ढंग से समझा तो यह समस्या टर्मिनल प्रोग्राम के कारण हो सकती है। ZOC टर्मिनल कार्यक्रम एक पेशेवर सॉफ्टवेयर है जो पूरी तरह से काम के लिए डिज़ाइन किया गया है। यह आपके द्वारा चुने गए पाठ को बिना किसी अतिरिक्त वर्ण के चिपका देता है। आप अपने सत्रों को एक अलग पाठ फ़ाइल में लॉग इन कर सकते हैं। और बहुत कुछ

अपडेट करें:

टर्मिनल प्रोग्राम में एक विकल्प है Paste without final 'newline'। यह मदद हो सकती है।


3
कृपया कम से कम यह कहें कि यह सवाल का जवाब कैसे देता है
स्टीफन चेज़लस

यदि आप एक स्ट्रिंग चिपकाते हैं जिसमें उस टर्मिनल में चल रहे शेल के संकेत पर न्यूलाइन या कैरिज-रिटर्न कैरेक्टर होते हैं, तो क्या होता है? यदि यह शेल को कमांड को सीधे-सीधे निष्पादित करने का कारण नहीं बनाता है (जैसा कि यहां पूछा गया है), तो यह कैसे करता है? क्या यह उन पात्रों को चयन से हटा देता है? क्या यह बैश के लिए भागने से पहले ^ V वर्ण सम्मिलित करता है ?
स्टीफन चेजलस

2
जैसे, यह स्पैम की तरह दिखता है (हालांकि मुझे यकीन है कि यह इस साइट को स्पैम करने का आपका इरादा नहीं था)। यह सवाल का जवाब नहीं देता है और यह केवल एक संबंधित वाणिज्यिक उत्पाद के लिए विज्ञापन है।
स्टीफन चेज़लस

2
@AlBundy, पता करें कि क्या आपका पसंदीदा टर्मिनल क्लाइंट सुरक्षा में चर्चा किए गए कारनामों को आज़माकर इस समस्या को हल करता है। Stackexchange.com/q/39118 (स्टीफन के उत्तर में उल्लेख किया गया है), और लिंक आपको वहीं मिलेंगे। यदि यह आपकी सुरक्षा करता है, तो आपके पास इसकी अनुशंसा करने के लिए अच्छे आधार हैं (अपने उत्तर में अपने परीक्षणों का विवरण प्रदान करें।)।
एलेक्सिस

आमतौर पर समस्या यह है कि आपने जो चुना है उसमें एक नई पंक्ति शामिल है। किसी भी अन्य टर्मिनल एमुलेटर के सामान्य व्यवहार से अलग "आपके द्वारा चयनित पाठ" को कैसे चिपकाया जाता है?
पीटर कॉर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.