Giả sử tôi có một tập lệnh nhận một đường dẫn làm tham số. Làm thế nào tôi có thể thực thi tất cả các tập lệnh nằm trong đường dẫn đó?
Giả sử tôi có một tập lệnh nhận một đường dẫn làm tham số. Làm thế nào tôi có thể thực thi tất cả các tập lệnh nằm trong đường dẫn đó?
Câu trả lời:
Giả sử theo đường dẫn bạn có nghĩa là đường dẫn đến một thư mục, sử dụng run-parts
. Từ man run-parts
:
run-parts - run scripts or programs in a directory
Đầu tiên bạn cần thiết lập quyền thực thi trên tất cả các tập lệnh bạn muốn chạy. Thông thường run-parts
sẽ bỏ qua các thư mục và các tệp không thể thực thi nằm trong thư mục đó.
Mặc dù trước khi chạy, bạn nên kiểm tra tệp nào sẽ được chạy bởi --test
tùy chọn:
run-parts --test /path/to/directory
Tôi nên đề cập rằng run-parts
có một quy ước đặt tên nghiêm ngặt cho các tập lệnh được thực thi:
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.
Kiểm tra man run-parts
để có thêm ý tưởng.
run-parts /home/you/Dropbox/scripts_to_run
.. hãy cẩn thận về cách đặt tên mặc dù ..
Phần chạy sẽ hoạt động nếu tập lệnh của bạn có tên chính xác. Nếu bạn không muốn đối phó với việc đổi tên tập lệnh của mình để phù hợp với run-parts
sơ đồ đặt tên phức tạp, bạn có thể làm một việc đơn giản như
for file in ~/target/*; do $file 2>/dev/null; done
Điều đó sẽ cố gắng thực hiện tất cả các tệp (và thư mục) được tìm thấy trong ~/target
. Các 2>/dev/null
chuyển hướng thông báo lỗi để nó sẽ không khiếu nại khi cố chạy các thư mục hoặc các tệp không thể thực thi.
Ngoài ra, bạn có thể thử tinh vi hơn
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Điều này sẽ kiểm tra xem mỗi kết quả là một tệp ( [ -f $file ]
), có thể thực thi được không ( [ -x $file ]
) và chỉ khi cả hai thử nghiệm đó thành công thì nó mới cố gắng thực hiện tệp.