Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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 on failure返回最后一个执行的命令代码未知_Bash_Wget_Mktemp - Fatal编程技术网

Bash wget on failure返回最后一个执行的命令代码未知

Bash wget on failure返回最后一个执行的命令代码未知,bash,wget,mktemp,Bash,Wget,Mktemp,下面是一个小的bash代码,它首先使用mktemp创建一个临时文件tmpfile,然后在成功或失败时执行wget操作,删除创建的临时文件 #!/bin/bash -ex tmpfile="$(mktemp)" wget -q $1 -O /tmp/temp.txt if [ $? -eq 0 ] ; then echo "wget success" rm "${tmpfile}" else echo "wget fail" rm "${tmpfile}" fi

下面是一个小的bash代码,它首先使用
mktemp
创建一个临时文件
tmpfile
,然后在成功或失败时执行
wget
操作,删除创建的临时文件

#!/bin/bash -ex
tmpfile="$(mktemp)"
wget -q $1 -O /tmp/temp.txt
if [ $? -eq 0 ] ; then
    echo "wget success"
    rm "${tmpfile}"
else
    echo "wget fail" 
    rm "${tmpfile}"
fi
将正确的url传递给脚本时,成功时,
wget
使用
$?
检查上一个命令的返回值,并按预期删除临时文件

root@box:/# ./temp.sh www.google.com
++ mktemp
+ tmpkeyfile=/tmp/tmp.83uGY1NH5B
+ wget -q www.google.com -O /tmp/temp.txt
+ '[' 0 -eq 0 ']'
+ echo 'wget success' 
wget success
+ rm /tmp/tmp.83uGY1NH5B
但是,如果url导致
wget
失败,例如404未找到等,我假设上次执行的
wget
应在
if
检查并删除
else
块中的临时文件时失败。这不会发生,因为
wget
只是返回,没有任何最后的返回值,如下所示。当调用
wget
失败时,这确实不会删除临时文件

root@box:/# ./temp.sh www.googlegoogle.com
++ mktemp
+ tmpkeyfile=/tmp/tmp.pSL7hKyAlz
+ wget -q www.googlegoogle.com -O /tmp/temp.txt
root@box:/#
我想知道如何通过任何方式捕获
wget
的每个返回故障代码

问题:

我可以知道如何通过任何方式捕获wget的每个返回失败代码吗 意味着

它应该响应每个返回的http状态代码:

wget --server-response http://googlegoogle/nx.file 2>&1 | awk '/^  HTTP/{print $2}'
编辑: 我已经试过你的代码了,效果很好

bash -x ./abc.sh www.googlegoogle.com
++ mktemp
+ tmpfile=/tmp/tmp.pwa08vGnjo
+ wget -q www.googlegoogle.com -O /tmp/temp.txt
+ '[' 4 -eq 0 ']'
+ echo 'wget fail'
wget fail
+ rm /tmp/tmp.pwa08vGnjo
这是wget的退出代码列表:

0       No problems occurred
1       Generic error code
2       Parse error — for instance, when parsing command-line options, the .wgetrc or .netrc…
3       File I/O error
4       Network failure
5       SSL verification failure
6       Username/password authentication failure
7       Protocol errors
8       Server issued an error response

检查此项:

使用此项,我必须更改代码,以便检查所有可用的http状态代码,并接受一个复杂的调用。如果任何命令返回非零退出代码,shebang行中的
-e
会告诉bash退出脚本。