Silenciar as unalias de bash quando não há nada para unalias

7

Eu tenho acesso a algumas contas remotas, que montei via sshfs em subdiretórios do $ HOME / SSHFS. Para lembrar-me de que não estou a trabalhar com ficheiros locais, defini $PROMPT_COMMAND para uma função prmt_cmd , em que defino um% diferente $PS1 if $PWD correspondências $HOME/SSHFS* . Agora, para adicionar um pouco de proteção extra, gostaria de adicionar os -i sinalizadores automaticamente aos comandos rm , mv e cp sempre que eu estiver em um subdiretório de $HOME/SSHFS . Então acabei com algo como

function prmt_cmd () {
if [[ $PWD == $HOME/SSHFS* ]] ; then
    PS1=some prompt
    alias rm='rm -I'
    alias mv='mv -i'
    alias cp='cp -i'
else
    # Reset the PS1, remove aliases
    PS1=my default prompt
    unalias rm mv cp
fi
}

(Na definição real, faço algumas outras coisas, mas isso é irrelevante.) No entanto, unalias reclama quando os aliases não existem, o que significa que recebo três mensagens de erro antes de cada prompt quando não estou SSHFS / *. unalias não parece ter um interruptor para silenciá-lo. Então, minha pergunta é: existe uma maneira melhor de alcançar o que eu quero? Talvez eu esteja simplesmente fazendo isso (completamente) errado.

Caso seja relevante, $BASH_VERSION = 4.1.5(1)-release no Ubuntu 10.10.

    
por Villemoes 29.04.2011 / 22:26

2 respostas

12

Apenas redirecione a saída.

unalias rm mv cp >/dev/null 2>/dev/null
    
por 29.04.2011 / 23:15
1

No bash, você pode fazer o seguinte para unalias apenas um alias, se existir, por exemplo, rm :

[ -n "'alias -p | grep '^alias rm=''" ] && unalias rm

Outra ideia seria sobrescrever o alias, mesmo que exista:

alias rm='/bin/rm'
    
por 29.04.2011 / 22:37

Tags