Mam skrypt bash, który stworzyłem na przetwarzanie wideo z w folderze i jego podfolderach:Bash pętli while czekać aż zadanie zakończyło
find . -type f -name '*.mkv' | while read file;
do
ffmpeg -i $file ...
done
Problem: Zamiast pętli czekając ffmpeg do wypełnienia, kontynuuje iterację w pętli. W rezultacie pliki nie są przetwarzane. Potrzebuję sposobu, aby aktualna iteracja pętli czekała, aż ffmpeg zostanie ukończona, zanim przejdę do następnej. Lub alternatywnie sposób na kolejkowanie tych elementów.
Edycja: Tak Rozwiązaniem podczas iteracji po zbiorze plików jest przekazanie parametru -nostdin do ffmpeg. Mam nadzieję, że to pomoże każdemu, kto może mieć podobny problem.
Również plik -> $ był kserokopią.
Może przykleić proces w tle za pomocą '&' na końcu polecenia 'ffmpeg'? – squiguy
Co powinieneś poczekać na zakończenie ffmpeg. Czy na pewno nie otrzymujesz błędu od ffmpeg (jak nieprawidłowe parametry)? – Mat
Pętla, jak to masz, powinna poczekać, aż uruchomią się wszystkie wewnętrzne polecenia, chyba że umieścisz '&' na końcu linii. Czy masz jakieś komunikaty o błędach? Spróbuj poprzedzić wewnętrzne polecenie za pomocą "echa" i dodając po nim przeskok 1, aby sprawdzić, czy sama pętla nie ma problemów. Na przykład w wierszu komend, który podasz, używasz 'pliku' zamiast' $ file'' – user295691