Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果wget失败,则返回准确的返回值_Bash_Wget - Fatal编程技术网

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
。等等,这值得写下来作为答案。