como colocar meus argumentos em um comando de alias do Bash?

como colocar meus argumentos em um comando de alias do Bash?

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-dirargumento.

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 ; }

informação relacionada