这是一个小的 bash 代码,它最初创建一个临时文件,然后tmpfile
使用成功或失败的操作删除创建的临时文件。 mktemp
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
但是,如果一个导致wget
不成功的 url,例如 404-not found 等,我认为最后执行的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
任何方式捕获每个返回失败代码。