Я на 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 True, якщо виконана команда повертає a
нульове значення як статус виходу. Кінець
команда повинна бути прописана втечею
крапка з комою (;). Аргумент команди {} є
замінено поточною назвою шляху. Якщо
Останній аргумент до -exec - це {} і ви
вказати +, а не крапку з комою (;),
команда викликається менше разів, з
{} замінено групами імен шляхів. Якщо
будь-яке виклик команди повертає a
ненульове значення як статус виходу, знайти
повертає ненульовий статус виходу.
Можливо, я міг би піти, роблячи щось подібне:
for f in $(find somedir); do
foo
done
Але я боюся займатися питаннями розділювача поля.
Чи можна викликати функцію оболонки (визначену в тому самому сценарії, не будемо турбуватися з питаннями розширення) під час find ... -exec ...виклику?
Я спробував його з обома /usr/bin/findі /bin/findі отримав той же результат.
PATH. Крім того, використовуйте sh -c '...'та обидва визначайте І запускайте функцію в ...біті. Це може допомогти зрозуміти відмінності між функціями та сценаріями .
export -f foo