วิธีรันสคริปต์ทั้งหมดในพา ธ


13

สมมติว่าฉันมีสคริปต์ที่ได้รับเส้นทางเป็นพารามิเตอร์ ฉันจะรันสคริปต์ทั้งหมดที่อยู่ในเส้นทางนั้นได้อย่างไร

คำตอบ:


14

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เพื่อรับแนวคิดเพิ่มเติม


อ่านนิดหน่อยฉันพบสิ่งนี้: #! / bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run สำหรับสคริปต์ใน "$ scripts_to_run_dir" / * ถ้าทดสอบ -x "$ script"; เสร็จแล้ว "$ script" fi เสร็จแล้วมันใช้ได้ผลกับฉันคุณคิดอย่างไร?
Lautaro Alvarez

@LautaroAlvarez สิ่งที่คุณทำกับสคริปต์นั้นสามารถทำได้ง่ายด้วยคำสั่งง่ายๆrun-parts /home/you/Dropbox/scripts_to_run.. ระวังเรื่องการตั้งชื่อ ..
heemayl

เรียกใช้ชิ้นส่วนจะเย็น แต่มันสร้างขึ้นสำหรับ cron.d และเขียนถึง syslog เป็น cron.notice แต่แหล่งที่ดีของความคิดเช่นอุณหภูมิเฮี๊ยบและไฟล์สำรอง ...
MMV-RU

9

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


หนึ่งนี้ทำงานอย่างสมบูรณ์สำหรับฉันในโครงการ (ก repo คดเคี้ยว) ผมทำงานใน - github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh
Rob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.