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'
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'
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
Ouch! Aveva un insetto sottile qui, dove stavo andando a sostituire le sostituzioni piuttosto che le regex. Una versione corretta è ora disponibile. –
credo, non è possibile. –
@AvinashRaj, ... non con un alias, no. Tuttavia, il comportamento desiderato può essere raggiunto in altri modi. –
Utilizzare una scelta rapida da tastiera per 'clear'. È un'operazione abbastanza frequente. 'Ctrl + L' dovrebbe funzionare con le impostazioni predefinite. – PSkocik