При сбое 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

Проверьте это: Ссылка

Другие вопросы по тегам