【问题标题】:Running process in background后台运行进程
【发布时间】:2013-08-25 16:15:43
【问题描述】:
for i in `cat input`
    do
    youtube-dl $i &&
done

此处的输入文件包含 YouTube 视频链接列表。我希望这段代码能够并行下载列表中的视频。但是这项工作一个接一个地完成了。是不是代码有问题?

【问题讨论】:

    标签: bash video background-process youtube-dl


    【解决方案1】:

    使用& 符号而不是&& 在后台运行进程。脚本应如下所示:

    while read -r i
    do
        youtube-dl "$i" &
    done < "input"
    wait ## Optional if you want the script to wait for all videos to download before exiting
    

    【讨论】:

    • 这个答案比其他答案更好,因为它可以正确处理包含空格字符的链接。但这只有在您的链接由换行符分隔时才有效。
    • 虽然使用xargs可能会更好
    • 我同意。如果 Internet 速度较慢或连接数过多,限制并行进程的数量可能会很有用。
    • 其实我的意思是只放一个“&”。这是一个错误sry。
    【解决方案2】:

    你有一个额外的&amp;,所以:

    for i in $(< input); do
        youtube-dl "$i" &
    done
    

    走得更远

    • &amp;&amp; 运算符用于布尔测试,例如:((1 == 1)) &amp;&amp; echo "1 == 1" || echo "1 != 1"
    • 始终用双引号保护您的变量,以防止 bash 分词
    • 反引号在 2013 年被弃用,取而代之的是 $( ) 形式。它更具可读性,并且易于嵌套。

    【讨论】:

    • 能否提供一个关于 ` ` 弃用的链接?我记得人们在 2013 年之前很久就停止使用反引号了,但我对官方状态很感兴趣
    【解决方案3】:
    for i in `cat input`; do
        youtube-dl "$i" &
    done
    

    另外,如果您不想同时下载过多的 youtube 垃圾邮件,您可以使用这个:

    cat file.txt | xargs -d '\n' -L 1 -P 5 youtube-dl
    

    此代码将同时下载 5 个视频。我很确定这正是你想要做的。此代码也适用于包含空格的链接。

    【讨论】:

    • 是的,我也在尝试这样做。是否有任何其他 gnu 工具可用于并行运行作业??
    猜你喜欢
    • 2021-04-06
    • 2011-05-30
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多