2014-09-12 14 views
5

Spesso scrivo ccclear anziché clear.Come utilizzare espressioni regolari negli alias bash

È possibile utilizzare regex in un alias? Qualcosa di simile:

alias c\+lear='clear' 
+2

credo, non è possibile. –

+0

@AvinashRaj, ... non con un alias, no. Tuttavia, il comportamento desiderato può essere raggiunto in altri modi. –

+1

Utilizzare una scelta rapida da tastiera per 'clear'. È un'operazione abbastanza frequente. 'Ctrl + L' dovrebbe funzionare con le impostazioni predefinite. – PSkocik

risposta

5

No.

Alias ​​correre semplice sostituzione prefisso, e non sono abbastanza potenti per molto altro.

Tuttavia, in Bash 4 è possibile utilizzare una funzione denominata command_not_found_handle per attivare questo caso ed eseguire la logica desiderata.

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

se si voleva essere in grado di aggiungere nuove mappature in modo dinamico:

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 
} 

Con quanto sopra, è possibile aggiungere nuove mappature banalmente:

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

Ouch! Aveva un insetto sottile qui, dove stavo andando a sostituire le sostituzioni piuttosto che le regex. Una versione corretta è ora disponibile. –