У меня есть часть сценария, которая не работает, как ожидалось. Предполагается взять список путей эпизодов, разделенных символом новой строки, в формате "/volume1/ Общие файлы / Мультфильм / Показать имя / Показать имя SXX / file.mkv" (цитаты включены в файл списка), запустить эти файлы через mediainfo и добавьте UID к каждой строке.

Я могу получить UID с однострочником

/volume1/@appstore/nzbdrone/bin/mediainfo "/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv" | grep Unique | awk '{print $4}'

Однако при выполнении следующего кода:

while read line; do
echo $line
/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
echo `/volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}'`
var1=`echo /volume1/@appstore/nzbdrone/bin/mediainfo $line | grep Unique | awk '{print $4}'`
echo $var1
done < $WorkingDir/output.txt

Я получаю следующий вывод:

"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"


"/volume1/Shared Files/Cartoon/Show Name/Show Name SXX/file.mkv"

Я знаю, что это не добавит UID, где я хочу, это просто попытка отладки. Я ожидаю, что хотя бы одна из этих двух пустых строк между каждой строкой echo $ будет содержать UID. Я не знаю, где это идет не так:/

(работает под bash на Synology DS412+)

1 ответ1

0

Двойные кавычки считываются в переменную line и передается как часть параметра mediainfo Мне никогда не нравилось использовать read для чтения целых строк, предпочитая вместо этого использовать команду line .

Вы должны удалить кавычки из ввода и вместо этого использовать:-

while line=`line`; do
. . . . . .
/volume1/@appstore/nzbdrone/bin/mediainfo "$line" | grep Unique | awk '{print $4}' > $WorkingDir/output2.txt
. . . . . .

Вы должны заключить в кавычки все экземпляры $line , а не только строку, которую я показал.

Обратите внимание, что line читает строки точно, включая начальные и конечные пробелы, которые read полосы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .