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 findchamada.
Aqui está o que a man findpá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/finde /bin/finde 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