Aliasing grep dans l'option -exec de find
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
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.
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.