Tôi có một kịch bản bash mà tôi tạo ra để xử lý video từ bên trong một thư mục và nó là thư mục con:Bash trong khi vòng lặp chờ đợi cho đến khi nhiệm vụ đã hoàn thành
find . -type f -name '*.mkv' | while read file;
do
ffmpeg -i $file ...
done
Vấn đề: Thay vì vòng lặp trong khi chờ đợi ffmpeg để hoàn thành, nó tiếp tục lặp qua vòng lặp. Kết quả cuối cùng là, các tệp không được xử lý. Tôi cần một cách để có vòng lặp hiện tại trong khi lặp lại để chờ đợi cho đến khi ffmpeg được hoàn thành trước khi tiếp tục tiếp theo. Hoặc cách khác để xếp hàng các mục này.
Chỉnh sửa: Vì vậy, giải pháp khi lặp qua tập hợp tệp là chuyển thông số -nostdin thành ffmpeg. Hy vọng điều này sẽ giúp bất cứ ai khác có thể có vấn đề tương tự.
Cũng có tệp -> $ tệp là lỗi đánh máy/dán.
Có thể dán quá trình trong nền bằng cách sử dụng '&' ở cuối lệnh 'ffmpeg'? – squiguy
Những gì bạn phải đợi cho ffmpeg kết thúc. Bạn có chắc là bạn không nhận được lỗi từ ffmpeg (như tham số không hợp lệ) không? – Mat
Vòng lặp như bạn có nó sẽ đợi cho đến khi mỗi lệnh bên trong chạy, trừ khi bạn đã đặt một '&' ở cuối dòng. Bạn có nhận được thông báo lỗi nào không? Hãy thử mở đầu lệnh bên trong bằng "echo" và thêm một giấc ngủ 1 sau khi nó, để xác minh rằng bản thân vòng lặp không có vấn đề. Ví dụ, trong dòng lệnh bạn đưa ra, bạn đang sử dụng 'file' thay vì' $ file' – user295691