При сбое wget возвращает последнюю выполненную команду неизвестный код
Вот небольшой код 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
Когда правильный скрипт передается в сценарий, 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
с помощью любых средств.
1 ответ
Вопрос:
Могу ли я узнать, как захватить каждый код ошибки возврата 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
Проверьте это: Ссылка