क्या टर्मिनल में चिपकाने को सुरक्षित बनाने का कोई तरीका है?


15

मैं हर समय टर्मिनल में फ़ाइल नाम / आदि पेस्ट करता हूं, और कभी-कभी क्लिपबोर्ड की सामग्री वह नहीं होती है जिसकी मुझे उम्मीद है।

अक्सर परिणाम पाठ की कई सौ पंक्तियों (उदाहरण के लिए, स्रोत कोड) को कमांड प्रॉम्प्ट में चिपकाया जाता है, भगवान को ट्रिगर करने से केवल यह पता चलता है कि क्या नादानी है।

क्या कोई तरीका है कि मैं जो कुछ भी पेस्ट कर रहा हूं, उसे आँख बंद करके करने से रोकें? काश यह सिर्फ पाठ चिपकाता, और मुझे यह तय करने देता कि मैं इसे निष्पादित करना चाहता / चाहती हूं।

जवाबों:


9

मान लें कि आप bash का उपयोग कर रहे हैं: यदि आप emacs शॉर्टकट सक्रिय करते हैं तो आप set -o emacsकमांड लाइन को संपादित करने के लिए Emacs का उपयोग कर सकते हैं:

  • Ctrl-XCtrl-EEmacs शुरू करने के लिए प्रॉम्प्ट पर टाइप करें
  • Emacs बफर में अपनी क्लिपबोर्ड सामग्री को चिपकाएँ और संपादित करें
  • Ctrl-XCtrl-CEmacs से बाहर निकलने के लिए उपयोग करें और स्वचालित रूप से कमांड चलाएं।

मैं आपको Ctrlइसके बजाय मतलब मान रहा हूं Cmd। इसके अलावा, set -o emacsयह करने के लिए उपयोग किए बिना लगता है $EDITOR। धन्यवाद! यह पूर्ण है।
अबी बेकेर्ट 3

5

सबसे सरल समाधान संभवतः एक पाठ संपादक को एक बफर के रूप में उपयोग करना है जहां आप सामग्री को दोबारा जांच सकते हैं, फिर पाठ संपादक से टर्मिनल तक कॉपी कर सकते हैं। यदि आप इसके लिए TextEdit का उपयोग करते हैं, तो आप संभवतः यह सुनिश्चित करना चाहेंगे कि यह सादे पाठ मोड में हो ( प्रारूप मेनू → प्लेन पाठ बनाएं ; TextT) लिंक के रूप में चिपकाने जैसे मुद्दों से बचने के लिए, URL नहीं।

दूसरी बात यह ध्यान देने की है कि बैश एक नई पंक्ति से पहले की हर चीज को निष्पादित करने का प्रयास करेगा, इसलिए यदि आप पाठ के एक ब्लॉक की नकल कर रहे हैं, तो आप यह सुनिश्चित करना चाहते हैं कि आपका चयन अंतिम वर्ण के बाद रुक जाए, बजाय इसके लाइन।

आप यह चाहते हैं: न्यूलाइन के बिना चयन

यह नहीं: न्यूलाइन के साथ चयन

बेशक, यदि आप पाठ ( यानी कई पैराग्राफ) के भीतर नए सिरे से सामान कॉपी कर रहे हैं , तो आपको मैन्युअल रूप से चयन को संपादित करने की आवश्यकता होगी।


समस्या यह है, मैं हर दिन कई सौ बार टर्मिनल में चीजों को चिपकाता हूं। बीच में एक पाठ संपादक का उपयोग करने से गधे में दर्द होगा
अभि बेकर्ट

एक हमलावर स्क्रीन पर दिखाई देने के बिना पाठ में कैरिज रिटर्न को एम्बेड कर सकता है, इसलिए पाठ का चयन कैसे करें इसका आपका उदाहरण आवश्यक रूप से कोई सुरक्षा प्रदान नहीं करता है।
sh1

1

मुझे भी यही मिलता है!

मेरा समाधान है लॉन्चबार क्लिपबोर्ड मैनेजर का उपयोग करके पेस्ट करना, हॉटकी के साथ Cmd+\। यह हाल ही की कतरनों की एक सूची पेश करता है, जिससे मुझे चिपकाने से पहले परिणाम का पूर्वावलोकन करने की अनुमति मिलती है: यदि मुझे वह सामग्री दिखाई नहीं देती है जिसकी मुझे उम्मीद है, तो मैं सीएमडी जारी करने से पहले बच निकलता हूं। मैं एक टेक्स्ट क्लिपिंग को 'एंटर' करने के लिए एक तीर कुंजी का भी उपयोग कर सकता हूं, जिससे मुझे लाइन द्वारा कंटेंट लाइन देखने की अनुमति मिलती है।

मेरा मानना ​​है कि अधिकांश लांचर ऐसा करते हैं - उदाहरण के लिए अल्फ्रेड (पावरपैक एडऑन) और क्विकसिल्वर (फ्री)।


1

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

वहाँ कई क्लिपबोर्ड प्रबंधक हैं, इसलिए अगर जंपकट आपकी नाव को नहीं चलाएगा, तो शायद कोई और आपकी आवश्यकताओं को पूरा करेगा


1

ब्रैकेटेड पेस्ट का उपयोग करें ।

ब्रैकेटेड पेस्ट एक विशेषता है जहां टर्मिनल शेल को बताता है कि आपने इसे टाइप करने के बजाय कुछ चिपकाया है, इसलिए शेल तब तक कमांड नहीं चला सकता है जब तक आप एंटर दबाते हैं।

Terminal.app इसका समर्थन करता है, लेकिन सभी टर्मिनल ऐसा नहीं करते हैं।

इसी तरह, सभी गोले भी इसका समर्थन नहीं करते हैं। ओएस एक्स के साथ आने वाले बैश का संस्करण ब्रैकेटेड पेस्ट का समर्थन नहीं करता है (लेखन के समय के रूप में, यह v3.2.57 है)।

हालाँकि, zsh ब्रैकेटेड पेस्ट का समर्थन करता है:

zsh-कोष्ठकों के भीतर-पेस्ट

Zsh ज्यादातर बैश के साथ संगत है (यहां तक ​​कि स्क्रिप्ट शायद काम करेगी, जब तक कि आप किसी प्रकार की अस्पष्ट सुविधा का उपयोग न करें), और कई मायनों में बेहतर है - उदाहरण के लिए, इसमें मल्टी-लाइन कमांड संपादन भी है!

zsh-बहु-आदेश


आप ब्रैकेटेड पेस्ट को कैसे सक्रिय करते हैं?
अभि बेकर्ट

1
यदि आप zsh का उपयोग करते हैं तो यह डिफ़ॉल्ट रूप से चालू है। किसी एक-लाइनर में चिपकाने की कोशिश करें! यह मेरे पहले स्क्रीनशॉट की तरह रिवर्स-हाइलाइटेड होना चाहिए, और यदि आपने एक बार डिलीट को हिट किया है तो इसे पूरी चीज़ को डिलीट कर देना चाहिए।
सिल्वरवुल्फ

मैंने वास्तव में इसे दुर्घटना से पाया, फिर सोचा कि यह क्यों नहीं है। डिफ़ॉल्ट बैश वास्तव में पुराना है। (:
सिल्वरवुल्फ

0

आप इस छोटी सी बाश स्क्रिप्ट को अपने में कहीं रख सकते हैं PATH:

#!/bin/bash

read -p "Are you sure you wish to execute \`$(pbpaste)\`? (Y/n) "    
[[ $REPLY =~ ^[Yy]?$  ]] && pbpaste | bash

यदि मैं इन सामग्रियों को /usr/local/pbexecuteउदाहरण के लिए रखता हूं और इसे निष्पादन योग्य बनाता हूं, तो मैं pbexecuteकमांड-लाइन से सुरक्षित रूप से निष्पादित कर सकता हूं , जो क्लिपबोर्ड की सामग्री को निष्पादित करने से पहले मेरी पुष्टि का संकेत देगा।

वैकल्पिक दृष्टिकोण शेल के भीतर से क्लिपबोर्ड की सामग्री के साथ एक पाठ संपादक को लॉन्च करना और बाहर निकलने पर संपादित सामग्री को स्वचालित रूप से निष्पादित करना है। उदाहरण के लिए:

#!/bin/bash

PBTEMP=$(mktemp -t pbtemp)
pbpaste > $PBTEMP
nano -t $PBTEMP
source $PBTEMP
rm $PBTEMP

क्यों बच गए टिक टिक? '' का प्रयोग करके भी काम करना चाहिए।
nohillside

@patrix अगर मैं बैकटिक्स से नहीं बचता हूं, तो पहले से ही प्रॉम्प्ट करते समय बैश इसे निष्पादित कर देगा।
गेरी

नहीं करना चाहिए backticks के रूप में अच्छी तरह से चाल है?
nohillside

@patrix ओह, हाँ, यह केवल इस बात पर वरीयता का विषय है कि आप किस प्रकार संकेत करना चाहते हैं। मैंने बैकटिक्स को चुना क्योंकि वे कमांड प्रतिस्थापन ऑपरेटर हैं और आमतौर पर नेत्रहीन मार्कअप कमांड (देखें StackExchange संपादन) के लिए उपयोग किया जाता है।
गेरी

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