Я использую 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