Aliasing grep na opção -exec de find
Eu tenho esses apelidos no meu ~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
mas eles não têm efeito quando eu executo find ... -exec grep ...e sempre tenho que fornecer essas opções manualmente.
Existe uma maneira de contar findpara confiar em aliases nos -execargumentos da opção? Estou pensando em arquivos de configuração, em vez de outros aliases.
Seria inseguro de alguma forma?
Respostas
Você não pode usar apelidos assim. Os aliases funcionam apenas se forem usados primeiro em uma longa sequência de comandos; o shell basicamente substitui o texto do alias pelo comando real. Quando você insere um comando, o shell procura primeiro um alias, depois uma função e assim por diante. A substituição de comando / substituição de alias não funciona se você estiver usando um alias no meio de uma sequência de comando.
Além disso, o -execsinalizador de find, sempre gerará um processo separado executando o binário, nem um alias, nem uma função, que é codificada.
Alguns shells permitem que os aliases sejam expandidos em qualquer lugar na linha de comando - por exemplo, zshtem o conceito de um alias global ,alias -g 'grep=grep --color=auto -H'
Se seu shell interativo for bash, no entanto, os aliases só serão expandidos quando aparecerem como a primeira palavra de um comando, então você precisa envolver a grepchamada em um shell e invocar o shell de uma forma que faça com que seu ~/.bashrcarquivo seja lido, como se estivesse em uma sessão de shell interativa.
Por exemplo
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
O AFAIK não é inseguro de forma alguma - no entanto, ele tem alguma sobrecarga e dificilmente é mais conveniente do que simplesmente fornecer as opções desejadas para o grep diretamente.