Я использую Solaris 10, и я протестировал следующее с помощью ksh (88), bash (3.00) и zsh (4.2.1).
Следующий код не дает никакого результата:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Поиск действительно соответствует нескольким файлам (как показано заменой -exec ...на -print), и функция отлично работает при вызове вне findвызова.
Вот что man findговорится на странице -exec:
-exec команда Истина, если выполненная команда возвращает
нулевое значение в качестве состояния выхода. Конец
Команда должна быть акцентирована сбежавшим
точка с запятой (;). Аргумент команды {}
заменяется текущим путем. Если
последний аргумент для -exec это {} и вы
укажите + вместо точки с запятой (;),
команда вызывается меньше раз, с
{} заменяется группами путей. Если
любой вызов команды возвращает
ненулевое значение в качестве статуса выхода, найти
возвращает ненулевой статус выхода.
Я мог бы, вероятно, уйти, делая что-то вроде этого:
for f in $(find somedir); do
foo
done
Но я боюсь иметь дело с проблемами разделителя полей.
Можно ли вызвать функцию оболочки (определенную в том же сценарии, давайте не будем беспокоиться о проблемах с областями видимости) из find ... -exec ...вызова?
Я попробовал это с обоими /usr/bin/findи /bin/findи получил тот же результат.
PATH. В качестве альтернативы используйте sh -c '...'и оба определите И запустите функцию в ...бите. Это может помочь понять различия между функциями и сценариями .
export -f foo