LINUX.ORG.RU

bash (shell) скрипт не исполняется в терминале, парсинг погоды для conky

 , , ,


0

2

Добрый день всем. Помогите разобраться. Я новичок в написании скриптов. Первая попытка, идея выводить погоду в conky парсингом с гисметео. Скрипт располагается в ~/.scripts/conky-weather.sh. Текст

#!/bin/bash `curl -s "http://informer.gismeteo.ru/xml/38880_1.xml" | tr «/>» «\n» | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/«//g' | tr -d „min=“ | tr -d „max=“ | sed -e 's/ /-/' | gawk '{ print „Темп.“,$1,»°C" }'`

Права исполнения задала chmod +x.

Ввожу саму строку в терминал, результат есть, все показывается, но при сохранении и запуске скрипта, результата нет никакого.

Запускала и путем bash /полный путь до скрипта и sudo bash / путь до скрипта. Терминал просто не реагирует.

Пожалуйста, разъясните, возможно не хватает некоторых переменных, неправильное окончание файла.

Буду благодарна за любую помощь.

#!/bin/bash 
curl -s "http://informer.gismeteo.ru/xml/38880_1.xml" | tr «/>» «\n» | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/«//g' | tr -d „min=“ | tr -d „max=“ | sed -e 's/ /-/' | gawk '{ print „Темп.“,$1,»°C" }'

Зачем обернул в ``?

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

обратные кавычки в редакторе vim подсказаны цветом команды curl

спасибо за замечание. сама понимаю, что обратные ковчки лишние , но редактор vim упорно подсказывал серым цветом, что начало строчки curl требует внимания. Отсутсвие кавычек, проблему исполнения файла не решило. Предполагаю, что дело в правах на чтение/исполнение и тд. Если будут варианты , пишите все

blckarchie ()

Без разницы что вам там подсказывает vim, скорее всего, вы просто не понимаете подстветку синтаксиса в vim.

bash скрипт - это просто последовательность команд, как если бы вы их вводили в командной строке напрямую.

Поэтому и в файле скрипта эти команды должны быть точно так же написаны.

Пробуйте.

kostik87 ★★★★★ ()

У меня ваш скрипт и в терминале не работает. Кстати, пришлось править кавычки, а то из-за того, что вы не пользуетесь [code][/code] ЛОР их изуродовал.

curl -s "http://informer.gismeteo.ru/xml/38880_1.xml" | tr "/>" "\n" | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/"//g' | tr -d "min=" | tr -d "max=" | sed -e 's/ /-/' | gawk '{ print "Темп.",$1,"°C" }'

Не работает прямо с первого шага:

$ curl -s "http://informer.gismeteo.ru/xml/38880_1.xml"
$ echo $?
52
$ man curl | grep '^\s*52'
       52     The server didn't reply anything, which here is considered an error.

Гисметео не отдаёт ответ.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Гисметео не отдаёт ответ.

Это из-за юзер-агента. Так должно сработать

curl -s -A 'Mozilla/5.0' "http://informer.gismeteo.ru/xml/38880_1.xml" | tr "/>" "\n" | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/"//g' | tr -d "min=" | tr -d "max=" | sed -e 's/ /-/' | gawk '{ print "Темп.",$1,"°C" }'

А я вообще яндексовскую погоду использую.

dadd ★★ ()

Я такие скрипты через тор заворачиваю, и для User Agent всегда рандомное значение из базы.

#!/bin/sh
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
HOUR=$(date +%H)
URL="http://informer.gismeteo.ru/xml/38880_1.xml"
if [ $HOUR -lt 8 ];then
	OPT="02"
elif [ $HOUR -lt 14 ];then
	OPT="08"
elif [ $HOUR -lt 20 ];then
	OPT="14"
else 
	OPT="20"
fi
curl -s -o- \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H "Accept-Encoding: gzip, deflate" \
-H "Accept-Language: en-US,en;q=0.5" \
-H "Cache-Control: max-age=0" \
-H "Connection: keep-alive" \
-H "Host: informer.gismeteo.ru" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: $UA" $URL|awk -v pat="hour=\"$OPT\"" ' $0 ~ pat { while (!match($0, "HEAT")) {getline;} split($2,min,"\""); split($3,max,"\""); avg=(min[2]+max[2])/2; print "Темп." avg "°C"; }'
vasyan ()

tr «/>» «\n» | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/«//g' | tr -d „min=“ | tr -d „max=“ | sed -e 's/ /-/' | gawk '{ print „Темп.“,$1,»°C" }'`

Выкиньте этот ужас немедленно, и никогда больше такого не пишите.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Выкиньте этот ужас немедленно, и никогда больше такого не пишите.

это неконструктивно. По факту мне тоже не нравится конструкция, я бы сделал ее проще. Но мне лениво для кого-то этим заниматься, поэтому я ничего не говорю. Давайте предложения :)

Crystal_HMR ★★★ ()

решено

РЕШЕНО . Если кому будет полезно, добавлен браузер в код, убраны обратные кавычки:

curl -s -A 'Mozilla/5.0' "http://informer.gismeteo.ru/xml/38880_1.xml" | tr «/>» «\n» | grep '<HEAT' | sed -n 1p | sed -e 's/<HEAT //' | sed -e 's/«//g' | tr -d „min=“ | tr -d „max=“ | sed -e 's/ /-/' | gawk '{ print „Темп.“,$1, »°C" }'

большое спасибо

blckarchie ()