Bash脚本执行带有变量的wget命令

5

我正在尝试执行一个包含变量的wget命令,但它只是忽略它,有任何想法我做错了什么吗?

#!/bin/bash

URL=http:://www.myurl.com

echo $(date) 'Running wget...'
wget -O - -q "$URL/something/something2"

“-O -” 选项将检索到的文档输出到标准输出,因此如果正在获取页面,则应该看到输出。您可以删除“-q”选项以查看“wget”是否有关正在进行的操作的任何信息。但这听起来可能只是“wget”连接所需的时间比较长。您等了多久? - Etan Reisner
啊哈,现在我看到错误了:Resolving http (http)... failed: Name or service not known. wget: unable to resolve host address http,它将真正的http://地址添加了ftp://前缀... - Broshi
2
你的URL中有两个冒号。 - Etan Reisner
URL=http:://www.myurl.com 中的两个冒号是打错了吗?此外,您应该将 URL= 设置为 URL="http://www.myurl.com"。同时,在您的脚本中使用 ShellCheck - user3439894
糟糕!今天可能开始失去注意力了...非常感谢。 - Broshi
显示剩余2条评论
3个回答

8

四件事情:

  1. 在你的URL周围添加引号:http:://www.myurl.com ==> "http:://www.myurl.com"
  2. 删除双冒号:"http:://www.myurl.com" ==> "http://www.myurl.com"
  3. 去掉wget命令中的额外标志和连字符:"wget -O - -q "$URL/something/something2"" ==> wget "$URL/something/something2"
  4. 在变量周围添加花括号:"wget "$URL/something/something2"" ==> "wget "${URL}/something/something2""

这样做可行:

#!/bin/bash

URL="http://www.google.com"

echo $(date) 'Running wget...'
wget "${URL}"

1

我在IPython(colab)中使用了这段代码:


URL = 'http:://www.myurl.com'
!wget {URL}

我写下这个答案是因为我正在搜索它!(

)


0

Bash(或其他shell)中的另一个方便选项是创建一个简单的帮助函数,该函数调用wget并使用几乎所有站点和通常使用的任何特定选项所需的常见选项。这减少了输入的数量,并且在脚本中也很有用。我将以下内容放在我的~/.bashrc中,以使其对所有shell /子shell可用。它验证输入,检查wget是否可用,然后将所有命令行参数传递给wget,并在脚本中设置默认选项:

wgnc () {
    if [ -z $1 ]; then
        printf "  usage:  wg <filename>\t\t(runs wget --no-check-certificate --progress=bar)\n"
    elif ! type wget &>/dev/null; then
        printf "  error: 'wget' not found on system\n"
    else
        printf "  wget --no-check-certificate --progress=bar %s\n" "$@"
        wget --no-check-certificate --progress=bar "$@"
    fi
}

你可以通过进一步为函数设置别名来进一步减少输入。我使用:

alias wg='wgnc'

这将常规的 wget --no-check-certificate --progress=bar URL 简化为 wg URL。显然,您可以根据需要设置选项,但这是在脚本中使用 wget 的另一种方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接