Korzystam z systemu Solaris 10 i przetestowałem następujące opcje z ksh (88), bash (3.00) i zsh (4.2.1).
Poniższy kod nie daje żadnego wyniku:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Znalezisko pasuje kilka plików (jak pokazano poprzez zastąpienie -exec ...
z -print
), a funkcja działa idealnie, kiedy nazywa zewnątrz od find
połączenia.
Oto, co man find
mówi strona -exec
:
-exec polecenie Prawda, jeśli wykonane polecenie zwraca a zero wartości jako status wyjścia. Koniec polecenie musi być przerywane znakiem ucieczki średnik (;). Argumentem polecenia {} jest zastąpiony bieżącą nazwą ścieżki. Jeśli… ostatnim argumentem dla -exec jest {} a ty podaj + zamiast średnika (;), polecenie jest wywoływane mniej razy, przy pomocy {} zastąpiono grupami ścieżek. Jeśli każde wywołanie polecenia zwraca a wartość niezerowa jako status wyjścia, znajdź zwraca niezerowy status wyjścia.
Prawdopodobnie mógłbym uciec, robiąc coś takiego:
for f in $(find somedir); do
foo
done
Ale boję się rozwiązywać problemy z separatorem pól.
Czy można wywołać funkcję powłoki (zdefiniowaną w tym samym skrypcie, nie zawracajmy sobie głowy problemami z zakresu) z find ... -exec ...
wywołania?
Próbowałem zarówno /usr/bin/find
i /bin/find
otrzymał ten sam wynik.
PATH
. Alternatywnie użyj sh -c '...'
i zdefiniuj ORAZ uruchom funkcję w ...
bicie. Może pomóc zrozumieć różnice między funkcjami a skryptami .
export -f foo