बैश कमांड को कर्सर से पहले कॉपी करें और उसके बाद पेस्ट करें?


24

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

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

मैं आमतौर पर केवल दो बार (टैब पूरा होने के साथ) पथ टाइप करता हूं या मैं कर्सर के साथ पथ को कॉपी और पेस्ट करूंगा। क्या कोई बशफू है जो इसे टाइप करना आसान बनाता है?


2
मुझे लगता है कि आपका मतलब bash-fu:)
बिल्ली

जवाबों:


43

कई तरकीबें हैं (मुझे लगता है कि पाया जाने वाला एक डुप्लिकेट है), लेकिन इसके लिए मुझे क्या करना है

cp /etc/prog/dir1/myconfig.yml{,.bak}

जो आपकी आज्ञा पर विस्तारित हो जाता है।

इसे ब्रेस विस्तार के रूप में जाना जाता है । यहां उपयोग किए गए फॉर्म में, {}अभिव्यक्ति कॉमा द्वारा अलग किए गए कई तारों को निर्दिष्ट करती है। ये पूरी /etc/prog/dir1/myconfig.yml{,.bak}अभिव्यक्ति का "विस्तार" करते हैं , बदले में {}प्रत्येक स्ट्रिंग के साथ भाग को प्रतिस्थापित करते हैं: खाली स्ट्रिंग, दे रहे हैं /etc/prog/dir1/myconfig.yml, और फिर .bak, दे रहे हैं /etc/prog/dir1/myconfig.yml.bak। परिणाम है

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

इन अभिव्यक्तियों को नस्ट किया जा सकता है:

echo a{b,c,d{e,f,g}}

पैदा करता है

ab ac ade adf adg

अनुक्रम बनाने के लिए संख्याओं का उपयोग करने वाला एक प्रकार है:

echo {1..10}

पैदा करता है

1 2 3 4 5 6 7 8 9 10

और आप कदम भी निर्दिष्ट कर सकते हैं:

echo {0..10..5}

पैदा करता है

0 5 10

लानत है मीठी। मुझे लगा कि मैं पहली बार पूछने के लिए नहीं था, शब्द के लिए एक मुश्किल सवाल है।
15:10 बजे user1028270

कॉमा वहाँ क्या करती है?
15:10 बजे user1028270

5
मैनुअल में ब्रेस विस्तार देखें : यह विस्तार में उपयोग किए जाने वाले मूल्यों को अलग करता है। यहाँ दो मान खाली स्ट्रिंग हैं और .bak
स्टीफन किट

12

इस तरह की चीज़ के लिए इतिहास का विस्तार उपयोगी हो सकता है (मान लें कि बैश इतिहास सक्षम है)।

अपने उदाहरण में, आप कर सकते हैं:

cp /etc/prog/dir1/myconfig.yml !#:1.bak

यहां, !#वर्तमान लाइन को संदर्भित करता है, वर्तमान लाइन !#:1पर पैरामीटर 1 को संदर्भित करता है ,
और !#:1.bakवर्तमान लाइन पर पैरामीटर 1 को '.bak' के साथ अंत में संदर्भित करता है।

जब आप इतिहास विनिर्देशक टाइप किया बाहर है, तो आप उपयोग कर सकते हैं Ctrl+ Alt+ Eअपने वास्तविक मूल्य को विस्तृत करने के लिए यदि आप दोहरी जांच जैसे या फ़ाइल का नाम बदलना चाहते हैं।

बैश मैन पेजों में "इतिहास विस्तार" अनुभाग में अधिक जानकारी है।


8

प्रोगो के उत्तर के समान, लेकिन कुछ हद तक सरल: C-wकट ("मारता है") शब्द को कर्सर के बाईं ओर, C-yसम्मिलित करता है ("यैंक") फिर से।

$ cp /etc/dir1/myconfig.yml                              (C-w)
$ cp                                                     (C-y)
$ cp /etc/dir1/myconfig.yml                              (space, C-y)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml       (finish text)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml.bak

2
यह भी ध्यान देने योग्य है कि आप एक पंक्ति में कई शब्दों के साथ ऐसा कर सकते हैं (यदि आपके फ़ाइलनाम में रिक्त स्थान हैं, उदाहरण के लिए) और Cy उन सभी को पेस्ट करेगा, जब तक आपने कर्सर को स्थानांतरित नहीं किया है या बीच में कुछ और टाइप नहीं किया है। एकल-वर्ण विलोपन (जैसे बैकस्पेस / डेल / ctrl-d) को छोड़कर विलोपन आदेशों का कोई भी मिश्रण इसके साथ काम करता है।
15:

6

संपादन के लिए डुप्लिकेट भागों को कमांडलाइन से आप वास्तव में कट-पेस्ट (ईमेक / बैश शब्दों में किल-यैंक) भी काट सकते हैं।

M-dशब्द सीमा तक आगे की ओर मारता है, और आप पाठ को कई बार मार सकते हैं और वे सभी एक साथ एक 'पेस्ट' के लिए एक साथ मिलनसार हो जाते हैं। सुविधाजनक!

यह सब कर्सर द्वारा कमांडलाइन पर वापस करें C-y। तो अगर आपके पास इस तरह की एक पंक्ति है (ब्लॉक तत्व have कर्सर स्थिति को इंगित करता है):

$ cp avb.txt                 (M-b M-b)
$ cpavb.txt                  (M-d) kill the word 'avb'
$ cp █.txt                    (C-y) yank it back
$ cp avb█.txt                 (C-e) to the end of line
$ cp avb.txt                 (C-y) yank it again
$ cp avb.txt avb             finish the line
$ cp avb.txt avb.foo

किसी भी तरह से आप इसे करना पसंद करते हैं, अपने आप को परिचित करना कि इंटरैक्टिव कुंजी विभाग में क्या बैश की पेशकश करना फायदेमंद होगा। http://web.mit.edu/gnu/doc/html/features_7.html


6

में tcshया zsh, Alt+Ctrl+_में emacsमोड ( copy-prev-wordविजेट), सम्मिलित करता है तो अंतिम शब्द

cp बहुत लंबे-लंबे पथ Alt+Ctrl+_।बैक

bashएक copy-backward-wordविजेट है (डिफ़ॉल्ट रूप से किसी भी कुंजी के लिए बाध्य नहीं है), लेकिन यह केवल शब्द को रिंग बफ़र में कॉपी करता है, आपको इसे यैंक करने के लिए Ctrl-Y( emacsमोड में) भी प्रेस करना होगा। लेकिन आप कर सकते हैं:

bind '"\e[cpw~": copy-backward-word'
bind '"\e\C-_": "\e[cpw~\C-Y"'

करवाने के लिए Alt+Ctrl+_की तरह दोनों कॉपी / snarf झटका करते हैं और पेस्ट / tcsh/ zsh

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