สมมติว่าฉันมีสคริปต์ที่ได้รับเส้นทางเป็นพารามิเตอร์ ฉันจะรันสคริปต์ทั้งหมดที่อยู่ในเส้นทางนั้นได้อย่างไร
สมมติว่าฉันมีสคริปต์ที่ได้รับเส้นทางเป็นพารามิเตอร์ ฉันจะรันสคริปต์ทั้งหมดที่อยู่ในเส้นทางนั้นได้อย่างไร
คำตอบ:
run-partsสมมติว่าโดยเส้นทางที่คุณหมายเส้นทางไปยังไดเรกทอรีที่ใช้งาน จากman run-parts:
run-parts - run scripts or programs in a directory
ในตอนแรกคุณต้องตั้งค่าการอนุญาตให้ใช้งานสำหรับสคริปต์ทั้งหมดที่คุณต้องการเรียกใช้ โดยปกติrun-partsจะไม่สนใจไดเรกทอรีและไฟล์ที่ไม่สามารถเรียกใช้งานได้อยู่ในไดเรกทอรีนั้น
แม้ว่าก่อนที่จะทำงานคุณควรตรวจสอบไฟล์ที่จะถูกเรียกใช้โดย--testตัวเลือก:
run-parts --test /path/to/directory
ฉันควรพูดถึงว่าrun-partsมีการตั้งชื่อแบบเข้มงวดสำหรับสคริปต์ที่จะดำเนินการ:
If neither the --lsbsysinit option nor the --regex option is given
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.
ตรวจสอบman run-partsเพื่อรับแนวคิดเพิ่มเติม
run-parts /home/you/Dropbox/scripts_to_run.. ระวังเรื่องการตั้งชื่อ ..
ส่วนทำงานจะทำงานหากสคริปต์ของคุณมีชื่อที่ถูกต้อง หากคุณไม่ต้องการจัดการกับการเปลี่ยนชื่อสคริปต์ของคุณเพื่อให้เหมาะสมกับrun-partsรูปแบบการตั้งชื่อที่ซับซ้อนคุณสามารถทำอะไรง่าย ๆ เช่น
for file in ~/target/*; do $file 2>/dev/null; done
ที่จะพยายามที่จะรันไฟล์ทั้งหมด (และไดเรกทอรี) ~/targetที่พบใน การ2>/dev/nullเปลี่ยนเส้นทางข้อความผิดพลาดดังนั้นมันจะไม่บ่นเมื่อพยายามที่จะเรียกใช้ไดเรกทอรีหรือไฟล์ที่ปฏิบัติการไม่ได้
หรือคุณสามารถลองสิ่งที่ซับซ้อนกว่านี้ได้
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
วิธีนี้จะตรวจสอบว่าผลลัพธ์แต่ละรายการเป็นไฟล์ ( [ -f $file ]), สามารถเรียกใช้งานได้ ( [ -x $file ]) และเฉพาะในกรณีที่การทดสอบทั้งสองอย่างสำเร็จจะพยายามเรียกใช้ไฟล์หรือไม่