ฉันใช้ 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