Tôi có một đoạn script nhỏ lặp qua tất cả các tệp của một thư mục và thực thi lệnh (thường là kéo dài). Về cơ bản là
for file in ./folder/*;
do
./bin/myProgram $file > ./done/$file
done
(Vui lòng bỏ qua lỗi cú pháp, đó chỉ là mã giả).
Bây giờ tôi muốn chạy kịch bản này hai lần cùng một lúc. Rõ ràng, việc thực thi là không cần thiết nếu ./done/$file tồn tại. Vì vậy, tôi đã thay đổi kịch bản thành
for file in ./folder/*;
do
[ -f ./done/$file ] || ./bin/myProgram $file >./done/$file
done
Vì vậy, về cơ bản câu hỏi là: Có thể cả hai tập lệnh (hoặc nói chung nhiều hơn một tập lệnh) thực sự ở cùng một điểm và kiểm tra sự tồn tại của done
tập tin bị lỗi và lệnh chạy hai lần?
nó sẽ là hoàn hảo, nhưng tôi rất nghi ngờ nó Điều này sẽ quá dễ dàng: D Nếu có thể xảy ra việc họ xử lý cùng một tệp, thì bằng cách nào đó có thể "đồng bộ hóa" các tập lệnh không?
done/$file
điểm đánh dấu có vẻ hơi giống make
mục tiêu đối với tôi.
xargs
hoặc GNU make
hoặc một số phiên bản của parallel
, thì không cần phải phát minh lại bánh xe cụ thể này.
xargs
với-P
tùy chọn có sẵn, hãy xem câu hỏi này .