ฉันใช้ 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 คือ {} และคุณ
ระบุ + มากกว่าเครื่องหมายอัฒภาค (;)
คำสั่งถูกเรียกใช้ครั้งน้อยลงด้วย
{} ถูกแทนที่ด้วยกลุ่มชื่อพา ธ ถ้า
การเรียกใช้คำสั่งใด ๆ ส่งคืน a
ค่าที่ไม่ใช่ศูนย์เป็นสถานะออก, ค้นหา
ส่งคืนสถานะทางออกที่ไม่ใช่ศูนย์
ฉันอาจจะออกไปทำอะไรแบบนี้:
for f in $(find somedir); do
foo
done
แต่ฉันกลัวว่าจะจัดการกับปัญหาตัวคั่นฟิลด์
เป็นไปได้ไหมที่จะเรียกใช้ฟังก์ชั่นเชลล์ (กำหนดไว้ในสคริปต์เดียวกันอย่าไปสนใจปัญหาการกำหนดขอบเขต) จากการfind ... -exec ...โทร?
ฉันพยายามมันมีทั้ง/usr/bin/findและ/bin/findและได้ผลเหมือนกัน
PATHคุณจะต้องทำให้การทำงานสคริปต์ภายนอกและวางไว้ใน อีกทางเลือกหนึ่งคือใช้sh -c '...'และกำหนดและเรียกใช้ฟังก์ชันใน...บิต มันอาจช่วยให้เข้าใจความแตกต่างระหว่างการทำงานและสคริปต์
export -f foo