首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wget with errorlevel bash输出

wget with errorlevel bash输出
EN

Stack Overflow用户
提问于 2010-11-08 01:33:34
回答 3查看 10.2K关注 0票数 7

我想创建一个bash文件(.sh),它执行以下操作:

我将脚本命名为./download.sh www.blabla.com/bla.jpg

脚本必须回显文件是否已下载...

我该怎么做呢?我知道我可以使用errorlevel,但我对linux还不熟悉,所以...

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-08 01:39:03

通常,Linux中的应用程序将设置环境变量$?在失败时。您可以检查此返回代码,看看它是否会给wget带来任何错误。

代码语言:javascript
复制
#!/bin/bash
wget $1 2>/dev/null
export RC=$?
if [ "$RC" = "0" ]; then
   echo $1 OK
else
    echo $1 FAILED
fi

您可以将此脚本命名为download.sh。使用chmod 755将权限更改为755。使用您希望下载的文件的名称来调用它。./download.sh www.google.com

票数 6
EN

Stack Overflow用户

发布于 2010-11-08 01:55:02

您可以尝试如下所示:

代码语言:javascript
复制
#!/bin/sh

[ -n $1 ] || {
    echo "Usage: $0 [url to file to get]" >&2
    exit 1
}

wget $1

[ $? ] && {
  echo "Could not download $1" | mail -s "Uh Oh" you@yourdomain.com
  echo "Aww snap ..." >&2
  exit 1
}

# If we're here, it downloaded successfully, and will exit with a normal status

在创建将(可能)被其他脚本调用的脚本时,重要的是要执行以下操作:

  • 确保参数健全性
  • 发送电子邮件、写入日志或执行其他操作,以便有人知道出了什么问题

>&2只是将错误消息的输出重定向到stderror,这允许调用脚本执行以下操作:

代码语言:javascript
复制
foo-downloader >/dev/null 2>/some/log/file.txt

因为它是一个简短的包装器,所以没有理由放弃一点理智:)

这还允许您有选择地将wget的输出定向到/dev/null,您实际上可能希望在测试时看到它,特别是当您收到一封电子邮件说它失败的时候:)

票数 3
EN

Stack Overflow用户

发布于 2015-01-22 02:42:51

wget以非交互方式执行。这意味着wget在后台工作,您无法使用$?捕获返回代码。

一种解决方案是处理"--server-response“属性,搜索http 200状态代码示例:

代码语言:javascript
复制
wget --server-response -q -o wgetOut http://www.someurl.com
sleep 5
_wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print $2 }'`
if [ "$_wgetHttpCode" != "200" ]; then
    echo "[Error] `cat wgetOut`"
fi

注意: wget需要一些时间来完成他的工作,因此我将其设置为“睡眠5”。这不是最好的方法,但在测试解决方案时效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4118837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档