Często piszę ccclear
zamiast clear
.Jak używać regex w aliasach basha
Czy można używać wyrażenia regularnego w aliasie? Coś jak:
alias c\+lear='clear'
Często piszę ccclear
zamiast clear
.Jak używać regex w aliasach basha
Czy można używać wyrażenia regularnego w aliasie? Coś jak:
alias c\+lear='clear'
nr
Aliasy prowadzone proste podstawienie prefiks i nie są wystarczająco silne, o wiele więcej.
Jednak w Bash 4 można użyć funkcji o nazwie command_not_found_handle
, aby uruchomić w tym przypadku i uruchomić dowolną logikę.
command_not_found_handle() {
if [[ $1 =~ ^c+lear$ ]]; the
clear
else
return 127
fi
}
Jeśli chcesz, aby móc dodać nowe mapowanie dynamicznie:
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
}
Z powyższego można dodać nowe mapowanie trywialnie:
common_typos['^ls+$']=ls
Ouch! Miałem tu subtelny błąd, w którym zamiast powtarzać, wykonywałem iterację zamiast zamienników. Poprawiona wersja jest już dostępna. –
myślę, że nie jest to możliwe. –
@AvinashRaj, ... nie z pseudonimem, nie. Pożądane zachowanie można jednak osiągnąć w inny sposób. –
Użyj skrótu klawiaturowego dla 'wyczyść'. Jest to dość częsta operacja. 'Ctrl + L' powinno działać z domyślnymi ustawieniami. – PSkocik