Você deve usar funções do shell em vez de aliases nesses casos. É um pouco mais para digitar, mas permite que você seja mais flexível:
function rm {
if ! test -d "$HOME/zap"; then
echo "No zap in home" >&2
return 1
else
mv -f -- "$@" "$HOME/zap/"
fi
}
O $@
expandirá para os argumentos que você fornecer rm
na linha de comando. O --
é necessário para sinalizar o fim dos sinalizadores de linha de comando (para que rm -f
, onde -f
é um arquivo, seja possível, rm
e mv
não compartilham muitas sinalizações de linha de comando).
Para acessar o comando rm
original, use \rm
ou command rm
.
O teste da existência de $HOME/zap
, a saída de uma mensagem de erro para o erro padrão e a saída com status de saída diferente de zero na função é apenas para mostrar que você pode fazer o que quiser. Você poderia, obviamente, reduzi-lo a apenas
function rm {
mv -f -- "$@" "$HOME/zap/"
}
O manual bash
contém a declaração:
For almost every purpose, aliases are superseded by shell functions.
Os aliases são realmente úteis apenas para etiquetando suas bandeiras favoritas em ls
e coisas assim.