2014-09-12 6 views
5

में regex का उपयोग करने के लिए मैं अक्सर clear के बजाय ccclear लिखें।कैसे बैश उपनाम

यह एक उपनाम में regex का उपयोग करना संभव है? कुछ की तरह:

alias c\+lear='clear' 
+2

मुझे लगता है कि, यह संभव नहीं है। । –

+0

@AvinashRaj, ... नहीं उपनाम वाले, नहीं। वांछित व्यवहार अन्य तरीकों से हासिल किया जा सकता है, यद्यपि। –

+1

'clear' के लिए कीबोर्ड शॉर्टकट का उपयोग करें। यह एक लगातार पर्याप्त ऑपरेशन है। 'Ctrl + L' को डिफ़ॉल्ट सेटिंग्स के साथ काम करना चाहिए। – PSkocik

उत्तर

5

सं

उपनाम चलाने सरल उपसर्ग प्रतिस्थापन, और अधिक के लिए पर्याप्त शक्तिशाली नहीं हैं।

हालांकि, बैश 4 में, आप एक समारोह command_not_found_handle कहा जाता है इस मामले पर ट्रिगर और अपनी पसंद के तर्क को चलाने के लिए उपयोग कर सकते हैं।

command_not_found_handle() { 
    if [[ $1 =~ ^c+lear$ ]]; the 
    clear 
    else 
    return 127 
    fi 
} 

आप नए मैपिंग गतिशील जोड़ने में सक्षम होना चाहता था, तो:

declare -A common_typos=() 
common_typos['^c+lear$']=clear 
command_not_found_handle() { 
    local cmd=$1; shift 
    for regex in "${!common_typos[@]}"; do 
    if [[ $cmd =~ $regex ]]; then 
     "${common_typos[$regex]}" "[email protected]" 
     return 
    fi 
    done 
    return 127 
} 
ऊपर के साथ

, आप नए मैपिंग तुच्छता से जोड़ सकते हैं:

common_typos['^ls+$']=ls 
+0

ओच! यहां एक सूक्ष्म बग था, जहां मैं regexes के बजाय प्रतिस्थापन के माध्यम से पुनरावृत्त कर रहा था। एक सही संस्करण अब जगह पर है। –

संबंधित मुद्दे