Здравствуйте. Сделал скрипт, читающий rss-поток вслух.
Алгоритм такой: скрипт тянет из интернета поток, преобразует его в формат «одна новость - одна строка», после чего читает получившееся вслух, построчно чередуя голоса.
Формат запуска: «имя_скрипта $url»
Впилена фишка для зацикленного фонового режима или запуска по cron (для предотвращения одновременного запуска нескольких копий используется flock): перед прочтением вслух скрипт пробивает текст на повторяемость, удаляя все новости, которые уже были прочитаны.
Интересует возможность оптимизации чего-либо в нижеизложенном, ибо вполне мог реализовать что-либо не самым лучшим образом.
Предполагается наличие xmlstarlet, elinks, RHVoice (небольшой правкой кода голосовой движок легко заменяется на другой).
if ( ping -c 1 "ya.ru" > /dev/null 2>&1 );then
if [ "$2" == 'text' ];then
mv ~/tmp/rss ~/tmp/rss.old
wget -O - $1 | xmlstarlet sel -t -m /rss/channel/item -o 'new_article' -v title -o ' ' -v description | elinks -no-references -dump-width 1000 | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | tr '\n' ' ' | tr -s [:blank:] | awk 'NF>0' | sed -e 's/new_article/\n/g' | tail -n +2 > ~/tmp/rss
text="$(cat ~/tmp/rss)"
while read linecheck;do
text="$(grep -a -v "$linecheck" <<< "$text")"
done < ~/tmp/rss.old
echo "$text"
else
voice1='-s aleksandr -p -0.r -r 0.35'
voice2='-s anna -p 0 -r -0.15'
voice=`echo $voice1$'\n'$voice2 | shuf | head -n 1`
while read string;do
if [ "$voice" == "$voice1" ];then
amixer set Master 3%+
voice=$voice2
else
amixer set Master 3%-
voice=$voice1
fi
echo $string | RHVoice-client $voice | aplay > ~/tmp/voiceerr
done <<< "$(rss.sh $1 text)"
fi
fi
Спасибо за внимание.