2014-09-12 9 views
5

Ich schreibe oft ccclear anstelle von clear.Wie Regex in Bash Aliase zu verwenden

Ist es möglich, Regex in einem Alias ​​zu verwenden? Etwas wie:

alias c\+lear='clear' 
+2

ich denke, es ist nicht möglich. –

+0

@AvinashRaj, ... nicht mit einem Alias, nein. Das gewünschte Verhalten kann jedoch auf andere Arten erreicht werden. –

+1

Verwenden Sie eine Tastenkombination für 'clear'. Es ist eine häufig genug Operation. 'Strg + L' sollte mit den Standardeinstellungen funktionieren. – PSkocik

Antwort

5

Nr

Aliases einfache Präfix Substitution laufen und sind nicht stark genug, um für viel mehr.

In Bash 4 können Sie jedoch eine Funktion namens command_not_found_handle verwenden, um in diesem Fall auszulösen und eine Logik Ihrer Wahl auszuführen.

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

Wenn Sie wollen dynamisch neue Zuordnungen hinzufügen können:

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 
} 

Mit der oben können Sie auch triviale neue Zuordnungen hinzu:

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

Autsch! Ich hatte hier einen kleinen Fehler, bei dem ich anstelle von Regex Ersatz durchsetzte. Eine korrigierte Version ist jetzt vorhanden. –