Не каждая команда находится в цикле while

Я пытаюсь создать скрипт, который просматривает папку и автоматически кодирует файлы, которые попадают в эту папку, с помощью ручного тормоза. Я хочу сделать это, отслеживая папку с помощью inotify, помещая новые дополнения в папку в список, а затем используя задание cron для их кодирования в одночасье. Однако при использовании цикла while для перебора списка ручной тормоз кодирует только первый файл, а затем сценарии продолжаются после цикла, не выполняя каждый файл в списке. Вот скрипт, который вызывает ручной тормоз:

#!/bin/bash

while IFS= read -r line
do
    echo "$(basename "$line")"
    HandBrakeCLI -Z "Very Fast 1080p30" -i "$line" -o "$line.m4v"
    rm "$line"
done < list.txt

> list.txt

При тестировании цикла с помощью простого эха вместо HandBrakeCLI он работает нормально и распечатывает каждый файл, поэтому я понятия не имею, что не так.

Вот сценарии, которые отслеживают папку, если проблема в этом:

#!/bin/bash

if ! [ -f list.txt ]
then
    touch list.txt
fi

inotifywait -m -e create --format "%w%f" tv-shows | while read FILE
do
    echo "$FILE" >> list.txt
done

Любая помощь будет здорово, спасибо

РЕДАКТИРОВАТЬ: Чтобы быть более конкретным, скрипт отлично работает для первого файла в list.txt, он без проблем кодирует его и удаляет старую версию, но тогда он не делает ничего из других в списке.


person Thomas Briggs    schedule 11.04.2020    source источник
comment
Вы можете запустить первый скрипт, используя bash -xv YourHandbrakeScriptName, чтобы увидеть все переменные по мере выполнения каждой строки.   -  person Mark Setchell    schedule 11.04.2020
comment
кроме вывода из ручного тормоза, который я могу опубликовать, если это необходимо, я просто вывожу это: + rm 'tv-shows/Marvels The Avengers- Trailer (OFFICIAL).mp4' + IFS= + read -r line # › list.txt Я также закомментировал ›list.txt для тестирования, чтобы я мог продолжать использовать кодировщик в list.txt, не перепечатывая его. Не совсем уверен, что я ищу. Просто сейчас тестирую его с трейлерами   -  person Thomas Briggs    schedule 11.04.2020
comment
Ммм, вы можете попробовать добавить пробел, за которым следует < /dev/null, в конец строки, начинающейся с HandbrakeCLI, на случай, если она захватит stdin.   -  person Mark Setchell    schedule 11.04.2020
comment
К сожалению, это не сработало, я попробовал HandBrakeCLI .... ‹ /dev/null и HandBrakeCLI .... › /dev/null, но все равно нет, он по-прежнему работает только с первым файлом в списке, а не со всеми.   -  person Thomas Briggs    schedule 11.04.2020
comment
В нем перечислены все файлы, если вы закомментируете строку HandbrakeCLI?   -  person Mark Setchell    schedule 11.04.2020
comment
Да, поэтому, если я изменю сценарий и заменю строку HandBrakeCLI на строку echo $, тогда он отлично распечатает каждую строку в файле list.txt.   -  person Thomas Briggs    schedule 11.04.2020
comment
Похоже, Handbrake захватывает stdin... github.com/HandBrake/HandBrake/issues/1316 что означает, что он может eat использовать другие ваши входные файлы.   -  person Mark Setchell    schedule 11.04.2020
comment
Может помочь ничего не повторять в HB... stackoverflow.com/a/17414265/2836621   -  person Mark Setchell    schedule 11.04.2020
comment
Да, теперь все работает отлично, спасибо большое   -  person Thomas Briggs    schedule 11.04.2020
comment
Прохладный! Возможно, связанный ответ от @gabkdlly. Удачи в вашем проекте.   -  person Mark Setchell    schedule 11.04.2020
comment
echo "" | ... не должно работать, когда ... < /dev/null не работает. Не могли бы вы перепроверить?   -  person that other guy    schedule 11.04.2020
comment
Могу сделать, точная команда, которую я сделал, была HandBrakeCLI -Z Very Fast 1080p30 -i $line -o $line.m4v ‹ /dev/null это правильный путь?   -  person Thomas Briggs    schedule 11.04.2020
comment
Да, если это все одна строка, это должно иметь тот же эффект.   -  person that other guy    schedule 11.04.2020
comment
Хорошо, извини @mark-setchell за потраченное впустую время, я, должно быть, сделал ошибку, набрав ‹ /dev/null или не сохранив файл, потому что только что перепроверил, и это решило проблему, не слишком уверен, где я ошибся . ‹ /dev/null теперь работает, поэтому я буду использовать его вместо этого, спасибо   -  person Thomas Briggs    schedule 11.04.2020
comment
Для вашего удобства ShellCheck также автоматически предлагает это   -  person that other guy    schedule 11.04.2020
comment
Спасибо за предложение, я буду помнить об этом инструменте для будущих проблем. На данный момент я новичок в сценариях bash и sh в целом.   -  person Thomas Briggs    schedule 11.04.2020


Ответы (1)


Взято из здесь

Чтобы решить проблему просто

echo "" | HandBrakeCLI ......

or

HandBrakeCLI ...... < /dev/null
person Thomas Briggs    schedule 11.04.2020