कैसे बैश में एलियंस का विस्तार करने के लिए?


84

क्या बैश में एलियन इनलाइन का विस्तार करने का एक तरीका है?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

जवाबों:


107

आप भी दबा सकते हैं Ctrl- Alt- eReadLine समारोह में प्रदर्शन करने के लिए shell-expand-lineजो अन्य नाम, इतिहास और शब्द विस्तार करेंगे। ध्यान दें कि कुछ कीबोर्ड Metaपर नहीं है Alt। आपको Escफिर प्रेस करने की आवश्यकता हो सकती है Ctrl-e

कार्यों alias-expand-lineऔर history-and-alias-expand-lineडिफ़ॉल्ट रूप से बाध्य नहीं कर रहे हैं, लेकिन आप अपने लिए निम्न के समान लाइनों जोड़कर उन्हें बाध्य कर सकते हैं ~/.inputrcफ़ाइल।

"\e\C-l": alias-expand-line

जो होगा Ctrl- Alt- l(छोटे अक्षर "ell") प्रदर्शन केवल उर्फ विस्तार।


क्या हम अन्य बैश पूर्णताओं को प्रभावित किए बिना उर्फ ​​विस्तार को <टैब> पर मैप कर सकते हैं?।
asdfg

2
@asdfg: यदि आप करते हैं, तो यह अन्य पूर्णताओं को तोड़ देगा। यह ऊपर दिखाए गए अनुसार मानचित्र बनाने के लिए (अनटाइटेड) काम कर सकता है और तब टैब के लिए मौजूदा एक को बदलने के लिए इस अतिरिक्त मानचित्र को जोड़ सकता है: "\C-i": "\e\C-l\e\e"जो एक मैक्रो बनाता है जो दोनों का प्रदर्शन करता है alias-expand-lineऔर complete। यह ऊपर दिए गए मेरे उत्तर से बाध्यकारी पर निर्भर करता है और यह है कि Esc-Esc के लिए डिफ़ॉल्ट बाइंडिंग बनी हुई है। यदि आप डिफ़ॉल्ट रूप से पूर्ण करना चाहते हैं, तो भी आप Esc-Esc कर पाएंगे।
डेनिस विलियमसन

4
दरअसल, ESC C-eबैश के लिए काम करता है, लेकिन C-x aZsh के लिए काम करता है। इसके अलावा ओएस एक्स पर परीक्षण किया गया
ब्लेज़

यदि आप बस Ctrl + कुछ ढूंढ रहे हैं, जहां कुछ "x" कुंजी हो सकती है, तो आप इसे कुछ प्रणालियों में इस तरह कर सकते हैं Control-x: history-and-alias-expand-line:।
igordcard

1
@ WeijunZhou: यह आपके विंडो मैनेजर और आपके पास किसी भी कस्टम सेटिंग्स पर निर्भर करता है। ग्नोम के लिए, उदाहरण के लिए, लॉक स्क्रीन सुपर + एल है।
डेनिस विलियमसन

2

यह वास्तव में एक बहुत सरल तरीका हो सकता है कि आप क्या करने की कोशिश कर रहे हैं ( bashसंस्करण> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptका manपृष्ठ: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
ये गलत है। शेल विकल्प "डाइरेक्सपांड" और "एक्सपेंडिअसिस" सवाल निर्दिष्ट करता है जैसे उपनामों का विस्तार करने में मदद नहीं करते हैं। मुझे नहीं पता कि किस टोपी से "डाइरेक्सपांड" लिया गया था ...? डिफ़ॉल्ट रूप से, "Expand_aliases" पहले से सेट है। यदि आप इसे परेशान करते हैं, तो इसका परिणाम मूल रूप से उपनामों को काम करने से अक्षम करना है (वे कमांड लाइन की व्याख्या से पहले विस्तारित नहीं होते हैं)। उदाहरण के लिए, एक उपनाम alias ll='ls -lने 'll' को कमांड / फंक्शन 'll' के रूप में व्याख्यायित किया है, जिसकी संभावना नहीं है।
FooF

0

यह काम नहीं करता। लेकिन मैं अनुमान लगा रहा / लगा रहा हूँ कि आप जो करना चाहते हैं, वह इस तरह से हो सकता है। आपको अपनी पूरी स्क्रिप्ट का उपयोग करना होगा। यह आप कैसे बनाते हैं:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

अब पूर्ण bash_completion फ़ाइल ( http://caliban.org/bash ) को स्रोत करें और उपरोक्त स्क्रिप्ट को bash_completion.d निर्देशिका के अंदर एक फ़ाइल में रखें, जो स्क्रिप्ट आपको url संदर्भों से मिलती है। मुझे पता है अगर यह काम नहीं करता है।

धन्यवाद।


0

एक सरल समाधान की तलाश में स्थापित किए गए लोगों के लिए, वैश्विक लोग आपके मित्र हो सकते हैं

सभी ग्लोब एक्सप्रेशन्स, सबकमांड और एलियास (वैश्विक सहित) का विस्तार करता है।

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

स्थापित करने के लिए बस आप "

plugins=(... globalias)

फिर SPACEआपके द्वारा लिखी गई कमांड के विस्तार को ट्रिगर करने के लिए बस दबाएं ।

यदि आप केवल कमांड लाइन का विस्तार किए बिना एक स्थान सम्मिलित करना चाहते हैं, तो दबाएं CTRL+SPACE

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