Uma versão melhor de @ slm:
find-grep() {
cmd=(find . -type f -name "$1" -exec grep "$2" {})
printf '%q ' "${cmd[@]}"
printf '+\n'
"${cmd[@]}" +
}
(não há necessidade de canos ou xargs
aqui) ou:
find-grep () (
set -x
find . -type f -name "$1" -exec grep "$2" {} +
)
(observe o ()
em vez de {}
para iniciar um subshell para limitar o escopo de set -x
. Note que ele não causa mais processos a serem bifurcados, é apenas que fork
para o processo que irá executar find
é feito antes).
Lembre-se de citar caracteres curinga para que eles não sejam expandidos pelo shell:
find-grep '*.c' pattern
Se, em vez disso, você quiser que ele seja enviado ao histórico, para que você veja o comando expandido quando pressionar a tecla Acima , você poderá escrevê-lo:
find-grep() {
cmd=$(printf '%q ' find . -type f -name "$1" -exec grep "$2" {})+
history -s "$cmd"
eval "$cmd"
}