【问题标题】:Not every command is being for in a while loop并非每个命令都在 while 循环中
【发布时间】:2020-07-24 06:31:54
【问题描述】:

我正在尝试制作一个查看文件夹的脚本,并将使用手刹自动对进入该文件夹的文件进行编码。我想这样做监视文件夹,使用 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

当使用简单的 echo 而不是 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 中的第一个文件,它对其进行编码没有问题并删除旧版本,但它不会执行列表中的任何其他文件

【问题讨论】:

  • 您可以使用bash -xv YourHandbrakeScriptName 运行第一个脚本,以查看每行执行时的所有变量。
  • 除了手刹的输出,如果需要我可以发布,我只是输出这个:+ rm 'tv-shows/Marvels The Avengers- Trailer (OFFICIAL).mp4' + IFS= + read -r line # > list.txt 我还注释掉了 >list.txt 以进行测试,这样我就可以继续在 list.txt 上运行编码器,而不必重新键入它不太确定我在寻找什么。目前只是用预告片测试它
  • 嗯,您可以尝试在以HandbrakeCLI 开头的行末尾添加一个空格,后跟&lt; /dev/null,以防它占用stdin
  • 在 HB 中不回声可能会有所帮助...stackoverflow.com/a/17414265/2836621
  • ... &lt; /dev/null 失败时,echo "" | ... 应该无法工作。你能再检查一下吗?

标签: linux bash handbrake


【解决方案1】:

取自here

简单的解决问题

echo "" | HandBrakeCLI ......

HandBrakeCLI ...... < /dev/null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多