Estou no Solaris 10 e testei o seguinte com ksh (88), bash (3.00) e zsh (4.2.1).
O código a seguir não produz nenhum resultado:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
A descoberta corresponde a vários arquivos (como mostrado substituindo -exec ...
por-print
), e a função funciona perfeitamente quando chamada fora da find
chamada.
Aqui está o que a man find
página diz sobre-exec
:
comando -exec True se o comando executado retornar um valor zero como status de saída. O fim de comando deve ser pontuado por um escape ponto e vírgula (;). Um argumento de comando {} é substituído pelo nome do caminho atual. Se o o último argumento para -exec é {} e você especifique + em vez do ponto e vírgula (;), o comando é chamado menos vezes, com {} substituído por grupos de nomes de caminho. E se qualquer invocação do comando retorna um valor diferente de zero como status de saída, localize retorna um status de saída diferente de zero.
Eu provavelmente poderia sair fazendo algo assim:
for f in $(find somedir); do
foo
done
Mas tenho medo de lidar com problemas de separador de campos.
É possível chamar uma função shell (definida no mesmo script, não vamos nos preocupar com problemas de escopo) de uma find ... -exec ...
chamada?
Eu tentei com ambos /usr/bin/find
e /bin/find
e obteve o mesmo resultado.
PATH
. Como alternativa, use sh -c '...'
e ambos definem AND executam a função no ...
bit. Pode ajudar a entender as diferenças entre funções e scripts .
export -f foo