Скрыть результат переменной приложения из вывода bash - PullRequest
1 голос
/ 30 августа 2010

Я пытаюсь создать скрипт, который будет запускать wget на нескольких сайтах и ​​проверять, получим ли мы 200 OK с сайта.

Моя проблема заключается в том, что результат применения wget отображается в stdout,Есть ли способ, которым я могу это скрыть?

Мой текущий скрипт:

RESULT=`wget -O wget.tmp http://mysite.com 2>&1`

Позже я буду использовать регулярное выражение для поиска 200 OK, которые мы получаем от ошибки, которую создает wget.Когда я запускаю скрипт, он работает нормально, но я получаю результат добавления wget между моими эхом.

Есть ли способ обойти это?

Ответы [ 3 ]

1 голос
/ 30 августа 2010

Вы можете использовать:

RESULT=`wget --spider http://mysite.com 2>&1`

И это тоже помогает:

RESULT=`wget -O wget.tmp http://mysite.com >/dev/null 2>&1`

Немного поиграл и придумал:

RESULT=`curl -fSw "%{http_code}" http://example.com/ -o a.tmp 2>/dev/null`

Это не выводит ничего, кроме "200" - ничего больше.

0 голосов
/ 31 августа 2010
TCP_HOST="mydomain.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "HEAD / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
    case "$line" in
        *200*OK* )
            echo "site OK:$TCP_HOST"
            exec >&5-
            exit
           ;;
        *) echo "site:$TCP_HOST not ok"
           ;;
    esac
done <&5
0 голосов
/ 30 августа 2010

Джека предложения хороши. Я бы немного их изменил.

Если вам нужно только проверить код состояния, используйте опцию --spider, на которую ссылается Джек. Из документов:

Когда вызывается с этой опцией, Wget будет вести себя как веб-паук, что означает, что он не будет загружать страницы, просто проверьте, что они там есть.

И второе предложение Джека показывает основные идеи, лежащие в основе сокрытия вывода:

... >/dev/null 2>&1

Вышеуказанное перенаправляет стандартный вывод на /dev/null. Затем 2>&1 перенаправляет стандартную ошибку в текущий стандартный дескриптор выходного файла, который уже был перенаправлен на /dev/null, поэтому он не выдаст вам никакого вывода.

Но, поскольку вы не хотите выводить данные, вы можете использовать опцию --quiet. Из документов:

Отключить вывод Wget.

Итак, я бы, вероятно, использовал следующую команду

wget --quiet --spider 'http://mysite.com/your/page'
if [[ $? != 0 ]] ; then
    # error retrieving page, do something useful
fi
...