สมมติว่าฉันมีสคริปต์ที่ได้รับเส้นทางเป็นพารามิเตอร์ ฉันจะรันสคริปต์ทั้งหมดที่อยู่ในเส้นทางนั้นได้อย่างไร
สมมติว่าฉันมีสคริปต์ที่ได้รับเส้นทางเป็นพารามิเตอร์ ฉันจะรันสคริปต์ทั้งหมดที่อยู่ในเส้นทางนั้นได้อย่างไร
คำตอบ:
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 ]
) และเฉพาะในกรณีที่การทดสอบทั้งสองอย่างสำเร็จจะพยายามเรียกใช้ไฟล์หรือไม่