
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-dir
argumentos.
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 ; }