【问题标题】:What's wrong with this youtube-dl automatic script?这个 youtube-dl 自动脚本有什么问题?
【发布时间】:2019-07-22 19:06:47
【问题描述】:

首先,我是 bash 脚本的新手,我刚刚开始学习,显然这个脚本有问题,但我不知道它是什么......

我创建了一个 bash 脚本来使用 youtube-dl 自动下载视频:

#!/bin/bash

echo url:
read url
export url
youtube-dl -f 'bestvideo[height<=360]+worstaudio/worst[height<=360]' $url

我的想法是我在命令行中输入脚本的名称,例如:“360”,它会询问一个 url(例如:一个 Youtube 视频),我粘贴它,然后 youtube-dl 使用规定的参数。它就像一个魅力......

现在,我想让脚本更复杂,我想我需要将 youtube-dl 命令转换为一个变量(当然,作为一个新手,我可能错了,但假设我适合时刻...)

#!/bin/bash

video="youtube-dl -f 'bestvideo[height<=360]+worstaudio/worst[height<=360]'"

echo url:
read url
export url
$video $url

当我尝试这个时,它会抛出一个错误:“错误:请求的格式不可用 " 我不知道出了什么问题...我想以尽可能少的代码更改来解决问题,我重复一遍,我想知道当前代码有什么问题,以便从中学习。

非常感谢您!

【问题讨论】:

  • 旁注:您不需要export url - 它不会在此处添加任何内容。

标签: bash variables youtube-dl


【解决方案1】:

这里有详细解释:I'm trying to put a command in a variable, but the complex cases always fail!

首先总是双引号你的变量,除非你知道确切如果你不这样做会发生什么。

你不需要export那个变量:你没有调用任何其他需要使用它的程序。

当你想重用一个命令时,考虑把它放在一个函数中:

#!/bin/bash
function video {
    youtube-dl -f 'bestvideo[height<=360]+worstaudio/worst[height<=360]' "$1"
}
read -p "url: " url
video "$url"

其实我会这样做:

  1. 将该函数添加到您的 ~/.bashrc,
  2. 来源该文件:source ~/.bashrc
  3. 然后你可以从命令行使用它:

    video 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
    

【讨论】:

  • 太棒了,它适用于多种参数组合!...正如我所说,我刚刚开始学习 bash 脚本,我理解的内容大约是我在互联网上搜索时看到的内容的 10%寻求帮助...关于您的代码修改的一个问题,但是...为什么需要 "$1" ?
  • 表示您为函数提供的第一个参数。在这种情况下,这就是函数接收 "$url" 的方式
  • 您也可以将"$1" 更改为"$@",这样您就可以像video url1 url2 url3 ... 一样调用它
  • 太好了,现在我明白了!...非常感谢!
【解决方案2】:

从 -f 参数中删除单引号将起作用。

例如。

video="youtube-dl -f bestvideo[height<=360]+worstaudio/worst[height<=360]"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多