Сайт | Скачать | Видео | Wiki

Автор Тема: Простое радио для консоли.  (Прочитано 27906 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
Re: Простое радио для консоли.
« Ответ #150 : 27 Декабрь 2020, 10:53:43 »
От себя скажу, что скрипт понравился - постоянно слушаю радио через него. На мой взгляд консольное радио очень удобно ну и плейлист неплохой  :police:

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1718
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Простое радио для консоли.
« Ответ #151 : 27 Декабрь 2020, 11:11:57 »
Фигня
Применил изменения. Из динамиков орет какая-то каша. Так, что - полная фигня
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #152 : 27 Декабрь 2020, 12:38:18 »
Line 19:
                cd "$FILE"
                ^-- SC2164: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
Вообще убило
Слишком категорично. Если перейти по кодам, там дается пояснение, почему это может плохо работать, в примерах https://github.com/koalaman/shellcheck/wiki/SC2164.

В теме Автообновление модулей браузеров я выкладывал свой скрипт firefox-up. Скрипт был рабочий, но я все же предложил опытным людям его проверить на ошибки. Опытные люди забили.  :) Скрипт работал, работал, но однажды сработала неправильно одна конструкция и я получил несколько неприятных моментов. В итоге исправил:
cd /opt/firefox
ls | grep -v distribution | xargs rm -rf

на
cd /opt/firefox && ls | grep -v distribution | xargs rm -rf


Дополню, что все ошибки имеют цвет - зеленый, желтый и красный. Данный скрипт не имеет грубых (красный), поэтому я и предложил просто причесать его через shellcheck. Ну и почитать ссылки ошибок, там много интересной инфы для неофитов.
« Последнее редактирование: 27 Декабрь 2020, 12:48:05 от krasnyh »

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1718
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Простое радио для консоли.
« Ответ #153 : 27 Декабрь 2020, 13:15:17 »
Скрипт работал, работал, но однажды сработала неправильно
Прикол в том, что у меня с их правками скрипт перестал работать
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #154 : 27 Декабрь 2020, 13:50:02 »
  ^-- SC2006: Use $(...) notation instead of legacy backticked `...`.
Умные сильно? Это мой скрипт. Какие конструкции хочу - такие и вворачиваю.
Это всего лишь бот. Он не может учесть все замыслы разработчика скрипта, но может найти в автоматическом режиме неточности, ошибки невнимательности... Для только входящих в увлекательный мир построения bash скриптов, избавит от грубых ошибок и даст много полезной инфы, которую пришлось бы гуглить самостоятельно.

А для гуру, уверенных в правильности той или иной конструкции, есть возможность отключать коды. Для данного примера из цитаты будет:
shellcheck -e SC2006 ./мой_скрипт


shellcheck --help
-e CODE1,CODE2..    --exclude=CODE1,CODE2..    Exclude types of warnings



p.s. Почему $(...) предпочтительнее `...` (обратные кавычки)?
https://mywiki.wooledge.org/BashFAQ/082
« Последнее редактирование: 27 Декабрь 2020, 17:01:19 от krasnyh »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #155 : 27 Декабрь 2020, 14:47:28 »
Прикол в том, что у меня с их правками скрипт перестал работать
После автоматических правок через нажатие "apply this/apply all *", скрипт все еще работоспособен. А вот оставшиеся замечания требуют вдумчивого подхода или не трогать, если нет понимания, почему на них сделан акцент разработчиком shellcheck и наоборот, понимания задач, вложенных автором обсуждаемого скрипта.
« Последнее редактирование: 27 Декабрь 2020, 15:04:56 от krasnyh »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Простое радио для консоли.
« Ответ #156 : 27 Декабрь 2020, 16:20:39 »
Скрипт опубликован на первой странице топика, отредактировал shellcheck-ом, докопался до ` ` , аргументировав что это устаревший синтаксис с проблемами и сюрпризами, то есть типа отрабатывает некоректно, применил рекомендованные изменения, проверил вроде работает...

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Простое радио для консоли.
« Ответ #157 : 27 Декабрь 2020, 16:27:09 »
скажу, что скрипт понравился
Спасибо Neyel !

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #158 : 27 Декабрь 2020, 16:33:11 »
Если задаться следовать рекомендациям shellcheck, то итоговый скрипт примет форму:
Цитата
#!/bin/bash
#cd ~/radio_dialog_011
opros="y"
while [ "$opros" = "y" ]
do
cat ./playlist/*.m3u | grep -v "#EXTM3U" | grep -v "EXTINF:-1," >./playlist/.pl_l.txt
cat ./playlist/*.m3u | grep -v "http://" | grep -v "https://" | grep -v "#EXTM3U" >./playlist/.pl_n.txt
a=$(cat ./playlist/.pl_n.txt)
echo "${a//#EXTINF:-1,/}" >./playlist/.interm_name.txt
b=$(cat ./playlist/.interm_name.txt)
echo "${b//#EXTM3U/}" >./playlist/.interm_name1.txt
z=$(cat ./playlist/.interm_name1.txt)
echo "${z// /_}" >./playlist/.interm_name2.txt
c=$(cat -n ./playlist/.interm_name2.txt)
dialog --menu "$Выбери категорию жанра радиостанции " 35 35 47  $(echo "$c") 2>./playlist/.nomer.txt
if test $? -eq 0
then
nom_radio=$(cat ./playlist/.nomer.txt)
sed -n "$nom_radio"p ./playlist/.interm_name2.txt >./playlist/.n.txt
sed -n "$nom_radio"p ./playlist/.pl_l.txt >./playlist/.l.txt
link=$(cat ./playlist/.l.txt)
name=$(cat ./playlist/.n.txt)
clear
echo "воспроизводится...""$name"
mpv --volume=45 "$link"
else
cd ./playlist || exit
rm .*.txt
exit
fi
done


- замена обратных кавычек на $()
- добавлено || exit
- удалено echo, где и без него работает

Остаются только два замечания, закавычить $(echo "$c"), но это сломает скрипт. Такие исключения описаны в SC2046. И замечание об избыточном echo SC2116. Здесь или оставить как есть, или так
c=./playlist/.interm_name2.txt
$(cat -n "$c") 2>./playlist/.nomer.txt



p.s. Конечно много текста и совсем не по теме, но я туже учусь. Ведь никто не поможет кроме себя. :) А тема грамотного скрипто-написания мне интересна.
« Последнее редактирование: 27 Декабрь 2020, 18:07:49 от krasnyh »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #159 : 27 Декабрь 2020, 17:31:51 »
sed -n `echo "$nom_radio"`p ./playlist/.interm_name2.txt >./playlist/.n.txt
Небольшая ошибка. В архиве, в шапке темы, ее уже нет.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Простое радио для консоли.
« Ответ #160 : 27 Декабрь 2020, 17:34:43 »
Небольшая ошибка. В архиве, в шапке темы, ее уже нет.
исправил по ходу размещения

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Простое радио для консоли.
« Ответ #161 : 27 Декабрь 2020, 19:20:28 »
- добавлено || exit
интересно а для чего он тут ?
« Последнее редактирование: 27 Декабрь 2020, 19:30:22 от totiks2012 »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5336
  • Репутация: +139/-1
Re: Простое радио для консоли.
« Ответ #162 : 27 Декабрь 2020, 19:34:50 »
Если команда cd ./playlist выполнится с ошибкой, то скрипт прервется и не запустится следующая команда rm .*.txt.
Можно и так записать cd ./playlist && rm .*.txt

Тот же случай, что описывал здесь:
Заменил
cd /opt/firefox
ls | grep -v distribution | xargs rm -rf
на
cd /opt/firefox && ls | grep -v distribution | xargs rm -rf
« Последнее редактирование: 27 Декабрь 2020, 19:36:55 от krasnyh »

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 872
  • Репутация: +23/-0
  • Автор темы
Re: Простое радио для консоли.
« Ответ #163 : 27 Декабрь 2020, 23:16:32 »
Спасибо за ответы  krasnyh !

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2550
  • Репутация: +33/-0
Re: Простое радио для консоли.
« Ответ #164 : 13 Апрель 2021, 05:45:34 »
про консольное радио и режим сна:
- у меня при запуске "терминального-радиоскрипта" под иксами на нетбуке со временем срабатывает "режим сна" - и звук пропадает (IceArch).
  Начал было подковываться по теме , но во избежание лишних заморочек попробовал - залогинился в другой tty , запустил там радио.
Перешел в tty-с-иксами; у нетбука "настал сончас" - ! а радио поёт :).
-----------
(# сейчас пока пользую/подпиливаю радиоскрипт под MPlayer. # повлияли и "возможность изъятия данных проигрываемой песни", и даунгрейд железа, а по процу на моем железе - mpv-vs-mplayer ~= в 2 раза разница [ smplayer по большому счету по нагрузке на проц близок к mpv] )
« Последнее редактирование: 13 Апрель 2021, 06:21:22 от knn »
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.