normalmente tenho o seguinte alias simples no meu bashrc:
alias g="grep --color=always --exclude-dir=\*.svn\*"
mas agora tenho que trabalhar em sistemas que possuem apenas GNU grep 2.5, portanto, nenhum --exclude-dir
argumento.
agora preciso de algo assim para funcionar:
alias g="grep --color=always $1 $2 | grep -v .svn"
mas é claro que os argumentos são anexados ao final do alias. $1 e $2 são analisados quando o alias é criado e não quando é chamado, mesmo com aspas fortes.
Posso resolver isso sem recorrer a scripts ou funções extras?
Responder1
Não, você não pode. Como afirma o manual do bash:
Não existe nenhum mecanismo para usar argumentos no texto de substituição, como em `csh'. Se argumentos forem necessários, uma função shell deve ser usada (*note Funções Shell::).
Funções são a coisa certa para isso e podem ser tão fáceis de escrever quanto um alias. Neste caso, poderia ser
function g () { grep --color=always "$1" "$2" | grep -v .svn ; }