【发布时间】:2015-10-29 06:15:18
【问题描述】:
这是一个小的 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
但是,如果导致 wget 不成功的 URL(例如 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 的每个返回失败代码。
【问题讨论】:
-
shebang 行中的
-e告诉 bash 如果任何命令返回非零退出代码,则退出脚本。