Bash 如果wget失败,则返回准确的返回值
如果Bash 如果wget失败,则返回准确的返回值,bash,wget,Bash,Wget,如果wget命令以有效方式失败而不进行更改,我希望返回准确的值 exit#?能否从wget输出返回值 前 #如果成功,wget将返回零而不是非零 ##0未发生任何问题。 ##1通用错误代码。 ##2解析错误例如,在解析命令行选项时,“.wgetrc”或“.netrc”。。。 ##3文件I/O错误。 ##4网络故障。 ##5 SSL验证失败。 ##6用户名/密码身份验证失败。 ##7协议错误。 ##8服务器发出了错误响应。 wgethttps://www.google.co.jp/images/b
wget
命令以有效方式失败而不进行更改,我希望返回准确的值
exit#?
能否从wget
输出返回值
前
#如果成功,wget将返回零而不是非零
##0未发生任何问题。
##1通用错误代码。
##2解析错误例如,在解析命令行选项时,“.wgetrc”或“.netrc”。。。
##3文件I/O错误。
##4网络故障。
##5 SSL验证失败。
##6用户名/密码身份验证失败。
##7协议错误。
##8服务器发出了错误响应。
wgethttps://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png -o test.img
如果[$?-ne 0]
然后
#退出16#failed ends1Bash的-e
选项可以执行您想要的操作:
如果管道(可能由单个简单命令组成)、列表或复合命令(请参见SHELL语法)以非零状态退出,请立即退出
知道这一点也很重要
Bash的退出状态是脚本中执行的最后一个命令的退出状态
我对Bash 4.4的实验表明,即使调用了陷阱处理程序,也会返回失败命令的退出状态:
$ ( trap 'echo $?' ERR; set -e; ( exit 3 ) ; echo true ) ; echo $?
3
3
所以你可以写:
#!/bin/bash
url=https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png
set -e
wget -o test.img "$url"
set +e # if you no longer want exit on fail
对于脚本中的一个命令,您可能更喜欢显式测试并按如下方式退出:
wget -o test.img "$url" || exit $?
Bash的-e
选项可以执行您想要的操作:
如果管道(可能由单个简单命令组成)、列表或复合命令(请参见SHELL语法)以非零状态退出,请立即退出
知道这一点也很重要
Bash的退出状态是脚本中执行的最后一个命令的退出状态
我对Bash 4.4的实验表明,即使调用了陷阱处理程序,也会返回失败命令的退出状态:
$ ( trap 'echo $?' ERR; set -e; ( exit 3 ) ; echo true ) ; echo $?
3
3
所以你可以写:
#!/bin/bash
url=https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png
set -e
wget -o test.img "$url"
set +e # if you no longer want exit on fail
对于脚本中的一个命令,您可能更喜欢显式测试并按如下方式退出:
wget -o test.img "$url" || exit $?
在示例的第一行中,您说“#如果图像获取成功(非零)”。这一评论具有误导性。如果成功,那么wget将返回零而不是非零。是的,我将修复一个替代方法,因为您使用的是Bash,就是使用set-e
-它只记录为以非零状态退出,但它似乎(至少在版本4.4中)传播失败命令的状态,即使通过退出
陷阱运行其他命令。例如,(trap'echo$?'EXIT;set-e;(EXIT 3);echo true);echo$?
从两个echo
命令发出3
。等等,这是值得写下来作为答案的。在示例的第一行中,您说“#如果图像获取成功(非零)”。这一评论具有误导性。如果成功,那么wget将返回零而不是非零。是的,我将修复一个替代方法,因为您使用的是Bash,就是使用set-e
-它只记录为以非零状态退出,但它似乎(至少在版本4.4中)传播失败命令的状态,即使通过退出
陷阱运行其他命令。例如,(trap'echo$?'EXIT;set-e;(EXIT 3);echo true);echo$?
从两个echo
命令发出3
。等等,这值得写下来作为答案。