Aliasing grep en la opción -exec de find

Sep 05 2020

Tengo estos alias en mi ~/.bashrc

alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'

pero no tienen ningún efecto cuando ejecuto find ... -exec grep ..., y siempre tengo que proporcionar esas opciones manualmente.

¿Hay alguna forma de saber que se finddebe confiar en los alias en los -execargumentos de la opción? Estoy pensando en archivos de configuración, en lugar de otros alias.

¿Sería peligroso de alguna manera?

Respuestas

1 Noname Sep 05 2020 at 00:15

No puedes usar alias como ese. Los alias funcionan solo si se usan primero en una secuencia de comando larga, el shell básicamente reemplaza el texto del alias con el comando real. Cuando ingresa un comando, el shell primero busca un alias, luego una función y así sucesivamente. La sustitución de comandos / sustitución de alias no funciona si está utilizando un alias en medio de una secuencia de comandos.

Además, la -execbandera de find, siempre generará un proceso separado que ejecuta el binario, ni un alias ni una función, que está codificada de forma rígida.

1 steeldriver Sep 05 2020 at 00:33

Algunos shells permiten que los alias se expandan en cualquier lugar de la línea de comando; por ejemplo, zshtiene el concepto de un alias global ,alias -g 'grep=grep --color=auto -H'

Sin embargo, si su shell interactivo es bash, los alias solo se expanden cuando aparecen como la primera palabra de un comando, por lo que deberá envolver la grepllamada en un shell e invocar el shell de una manera que haga ~/.bashrcque se lea su archivo. como en una sesión de shell interactiva.

Por ejemplo

find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +

AFAIK, no es inseguro de ninguna manera; sin embargo, tiene algunos gastos generales y no es más conveniente que simplemente proporcionar las opciones deseadas para grep directamente.