Tôi đang sử dụng Solaris 10 và tôi đã thử nghiệm các điều sau với ksh (88), bash (3.00) và zsh (4.2.1).
Đoạn mã sau không mang lại kết quả nào:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
Tìm kiếm không khớp với một số tệp (như được hiển thị bằng cách thay thế -exec ...
bằng -print
) và chức năng hoạt động hoàn hảo khi được gọi bên ngoài từ find
cuộc gọi.
Đây là những gì man find
trang nói về -exec
:
Lệnh -exec Đúng nếu lệnh được thực thi trả về một không có giá trị như trạng thái thoát. Kết cục của lệnh phải được nhấn mạnh bởi một lối thoát dấu chấm phẩy (;). Đối số lệnh {} là được thay thế bằng tên đường dẫn hiện tại. Nếu đối số cuối cùng cho -exec là {} và bạn chỉ định + thay vì dấu chấm phẩy (;), lệnh được gọi ít lần hơn, với {} được thay thế bằng các nhóm tên đường dẫn. Nếu bất kỳ lệnh gọi nào trả về một giá trị khác không như trạng thái thoát, tìm trả về trạng thái thoát khác không.
Tôi có lẽ có thể thoát khỏi việc làm một cái gì đó như thế này:
for f in $(find somedir); do
foo
done
Nhưng tôi sợ phải đối phó với các vấn đề phân tách trường.
Có thể gọi một hàm shell (được xác định trong cùng một tập lệnh, chúng ta đừng bận tâm đến các vấn đề phạm vi) từ một find ... -exec ...
cuộc gọi?
Tôi đã thử nó với cả hai /usr/bin/find
và /bin/find
và nhận được kết quả tương tự.
PATH
. Ngoài ra, sử dụng sh -c '...'
và cả hai định nghĩa VÀ chạy hàm trong ...
bit. Nó có thể giúp hiểu được sự khác biệt giữa các chức năng và tập lệnh .
export -f foo