¿Cómo poner mis argumentos en un comando de alias de Bash?

¿Cómo poner mis argumentos en un comando de alias de Bash?

Normalmente tengo el siguiente alias simple en mi bashrc:

alias g="grep --color=always --exclude-dir=\*.svn\*"

pero ahora tengo que trabajar en sistemas que sólo tienen GNU grep 2.5, por lo que no hay --exclude-dirargumentos.

Ahora necesito algo como esto para funcionar:

alias g="grep --color=always $1 $2 | grep -v .svn"

pero, por supuesto, los argumentos se añaden al final del alias. $1 y $2 se analizan cuando se crea el alias, no cuando se llama, incluso con comillas fuertes.

¿Puedo solucionar eso sin recurrir a scripts o funciones adicionales?

Respuesta1

No, no puedes. Como dice el manual de bash:

No existe ningún mecanismo para usar argumentos en el texto de reemplazo, como en `csh'. Si se necesitan argumentos, se debe utilizar una función de Shell (*nota Funciones de Shell::).

Las funciones son lo adecuado para esto y pueden escribirse tan fácilmente como un alias. En este caso, podría ser

function g () { grep --color=always "$1" "$2" | grep -v .svn ; }

información relacionada