Я на 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