Não é fácil. O problema é que quando você faz:
rm -- *.txt
O rm apenas vê a lista de arquivos, não o padrão globbing que já foi expandido pelo shell.
O que você poderia fazer é (zsh):
alias rm='noglob rm'
Isso diz ao zsh que os padrões não devem ser expandidos ao chamar rm. Então você pode redefinir rm como uma função que faz a própria expansão e adiciona o "-i" se precisar ser algo como:
'rm'() {
[[ "$*" = *[*[?]* ]] && set -- -i "$@"
command rm $~@
}
O problema com essa abordagem é que esse novo "rm" não vê a diferença entre
rm *
e
rm '*'
Para remover o arquivo chamado *
, você teria que escrevê-lo:
rm [*]