Aliasing grep dans l'option -exec de find

Sep 05 2020

J'ai ces alias dans mon ~/.bashrc

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

mais ils n'ont aucun effet lorsque je cours find ... -exec grep ..., et je dois toujours fournir ces options manuellement.

Existe-t-il un moyen de dire findde s'appuyer sur des alias dans les -execarguments de l' option? Je pense aux fichiers de configuration plutôt qu'à d'autres alias.

Serait-ce dangereux d'une manière ou d'une autre?

Réponses

1 Noname Sep 05 2020 at 00:15

Vous ne pouvez pas utiliser d'alias comme ça. Les alias ne fonctionnent que s'ils sont utilisés en premier dans une longue séquence de commandes, le shell remplace essentiellement le texte de l'alias par la commande réelle. Lorsque vous entrez une commande, le shell recherche d'abord un alias, puis une fonction et ainsi de suite. La substitution de commande / la substitution d'alias ne fonctionne pas si vous utilisez un alias au milieu d'une séquence de commandes.

De plus, le -execdrapeau de find, engendrera toujours un processus séparé exécutant le binaire, ni un alias, ni une fonction codée en dur.

1 steeldriver Sep 05 2020 at 00:33

Certains shells permettent d'étendre les alias n'importe où dans la ligne de commande - par exemple, zsha le concept d' alias global ,alias -g 'grep=grep --color=auto -H'

Cependant, si votre shell interactif est bash, les alias ne sont développés que lorsqu'ils apparaissent comme le premier mot d'une commande, vous devrez donc envelopper l' grepappel dans un shell et appeler le shell de manière à ce que votre ~/.bashrcfichier soit lu, comme dans une session shell interactive.

Par exemple

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

AFAIK n'est en aucun cas dangereux - cependant, il a des frais généraux et n'est guère plus pratique que de simplement fournir les options souhaitées à grep directement.