जब कोई शॉर्टकट कुंजी दबाया जाता है तो शेल में स्क्रिप्ट निष्पादित कैसे करें


14

जब कोई शॉर्टकट कुंजी दबाया जाता है तो मैं शैल में स्क्रिप्ट को कैसे निष्पादित कर सकता हूं।

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


मैंने आपके द्वारा उपयोग की गई विधि की कोशिश की, bind '"\e[24~":"airmon-ng start wlan0\n"'लेकिन जब मैंने टर्मिनल को बंद कर दिया, तो चीज़ रीसेट हो गई और सभी हॉटकी निकल गए

जवाबों:


20

आप बिल्ट कमांड का उपयोग कर सकते हैं, bindएक कीबोर्ड शॉर्टकट को मैप करने के लिए ताकि यह एक कमांड / शेल स्क्रिप्ट निष्पादित करे।

उदाहरण

कहते हैं कि हम कमांड चलाना चाहते हैं pwd, जब हम F12कुंजी दबाते हैं।

$ bind '"\e[24~":"pwd\n"'

अब जब मैं F12अपने संकेत पर प्रेस $:

$ pwd
/home/saml

कीबोर्ड शॉर्टकट का निर्धारण

आप दिए गए कीबोर्ड शॉर्टकट के लिए एस्केप कोड निर्धारित करने के लिए निम्न तकनीक का उपयोग कर सकते हैं। अधिकांश सिस्टम पर Ctrl+ V, रिलीज़ को दबाएं और फिर उस कुंजी को दबाएं जिसके लिए आपको कोड चाहिए। Mइसके बजाय इसके साथ काम करने वाले कुछ अन्य सिस्टम हैंV

उदाहरण

दबाने Ctrl+ के Vबाद दोनों Ctrlको मुक्त करें Vऔर अंत F12में एक टर्मिनल विंडो में दबाएं यह रिटर्न:

$ ^[[24~

इस आउटपुट की व्याख्या इस प्रकार की जा सकती ^[है, Escकुंजी है। तो जब हम का उपयोग कर इस विशेष कुंजी निर्दिष्ट करना चाहते हैं bindकमांड हम एक उपयोग करने की आवश्यकता \eनिरूपित करने के लिए Escकुंजी ऊपर से सब कुछ होता है। तो bindकमांड इस तरह दिखता है:

$ bind '"\e[24~":"....."'

बीच में एक आदेश निष्पादित करना

आप bind -xसेटअप कीबोर्ड शॉर्टकट का उपयोग भी कर सकते हैं , जो प्रॉम्प्ट पर कुछ टाइप करने के बीच में होने पर कमांड चलाएंगे, और ये कमांड का आउटपुट प्रदर्शित होगा, लेकिन कभी आप जो प्रॉम्प्ट पर टाइप कर रहे थे वह बरकरार रहेगा।

$ bind -x '"\eW":"..."'

नोट: यह विधि केवल कीबोर्ड शॉर्टकट के साथ काम करती है जो 1 वर्ण का उत्पादन करती है, इसलिए F12यहां काम नहीं करेगा।

उदाहरण

आइए उर्फ कीबोर्ड शॉर्टकट Alt+ Shift+ W

$ bind -x '"\eW":"who"'

कहो मैं कमांड टाइप कर रहा हूं finger:

$ finger

अब मैं कीबोर्ड शॉर्टकट मारा Alt+ Shift+ W:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

जो bindचल रहा है वह परिभाषित कमांड को चला रहा है who, इसका आउटपुट ले रहा है और इसे प्रॉम्प्ट के सामने सम्मिलित कर रहा है। यदि आप इसे दोहराते हैं तो आप देखेंगे कि यहाँ क्या हो रहा है, यहाँ से इसका आउटपुट 2 बार हिट हो रहा है:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

तुम्हारी समस्या

तो एक विचार यह होगा कि bind -xउपरोक्त विधि का उपयोग करें और catअपने प्रॉम्प्ट पर इस पाठ फ़ाइल को प्रदर्शित करें:

$ bind -x '"\eW":"cat someinfo.txt"'

अब जब मैं कमांड चलाता हूं तो मैं इस फाइल को देख सकता हूं:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

फ़ाइल someinfo.txtका आउटपुट मेरे fingerकमांड के ऊपर प्रदर्शित किया जा रहा है।

संदर्भ


मुझे केवल सामग्री प्रदर्शित करने की आवश्यकता है, इसे निष्पादित करने की नहीं।
user3539

इसलिए एक स्क्रिप्ट को बांधें जो सामग्री प्रदर्शित करती है।
लार्स रोहरबैच

1
Ctrl + m मेरे लिए काम नहीं कर रहा है। यह इस तरह कार्य करता है जैसे कि मैं सिर्फ एंटर दबाता हूं। एक विकल्प जो मुझे लगता है कि (मैं एक बैश नौसिखिया हूं) टाइप करना है echo ' (सिंगल-कोट के बाद स्पेस), फिर Ctrl + v दबाएं, फिर जो कुंजी आप चाहते हैं, और फिर स्पेस, सिंगल-कोट ... जैसा कि यहां वर्णित है । उदहारण:echo ' ^[OD '
aliteralmind
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.