LINUX.ORG.RU

[bash] небольшой скриптик

 


0

0

Хотел выводить обложки альбомов, проигрываемых через mpd+sonata, посредством conky. Для этого нужно вытаскивать по маске изображения и кидать их в определенное место, я пытаюсь кидать в ~/.conky/currentcover.jpg. Но, в баше я новичок. В общем, скрипт следующий:

#!/bin/bash
sonata info > ~/.conky/sonata_info
if [ -f ~/sonata ]; then
	ART=$(cat ~/.conky/sonata_info | grep Исполнитель | cut -c 14-)
	ALB=$(cat ~/.conky/sonata_info | grep Альбом | cut -c 9-)
	echo "$ART-$ALB.jpg" > ~/.conky/image
	IMG=$(cat ~/.conky/image)
	if [ -f "~/.covers/$IMG" ]; then
		cp "~/.covers/$IMG" "~/.conky/currentcover.jpg"
	else
			cp "~/.conky/nocover.jpg" "~/.conky/currentcover.jpg"
	fi
else
	exit 1
fi

Пример ~/.conky/sonata_info:

Название: Burnt Flowers Fallen
Исполнитель: Type O Negative
Альбом: October Rust
Год: 1996
Дорожка: 09
Жанр: Gothic Metal
Файл: 09 - Burnt Flowers Fallen.mp3
Время: 2:15 / 6:10
Битрейт: 320

После отработки 4-7 строк в $IMG получаем :

ins@localhost ~ $ echo $IMG
Type O Negative-October Rust.jpg

,но

ins@localhost ~ $ cp "~/.covers/$IMAGE" "~/.conky/currentcover.jpg"
cp: невозможно выполнить stat для «~/.covers/Type O Negative-October Rust.jpg»: Нет такого файла или каталога

видимо потому, что

ins@localhost ~ $ ls -l ~/.covers/ | grep $IMG
grep: O: Нет такого файла или каталога
grep: Negative-October: Нет такого файла или каталога
grep: Rust.jpg: Нет такого файла или каталога

Сам файл на месте...

ins@localhost ~ $ ls ~/.covers/ | grep Rust
Type O Negative-October Rust.jpg

Вопрос вполне логичный - ЧЯДНТ?

★★★★

Последнее исправление: Insomnium (всего исправлений: 2)

Ответ на: комментарий от megabaks

В grep'е - да. Пардон. А вот тут

 if [ -f "~/.covers/$IMG" ]; then 
      cp "~/.covers/$IMG" "~/.conky/currentcover.jpg" 
?

Пардон ещё раз, надо баш поучить, а то дальше С, плюсов и джавы не вижу ничего. :\

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

>а то дальше С, плюсов и джавы не вижу ничего. :\

То же самое, только вместо явы делфи =) Посему пришлось тут спрашивать про & в конце строки, чтобы не одижал завершения демона =)

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

переменную экранируй!
т.е. «~/.covers/»$IMG"" например
чёб пробелы не воспринимались в имени картинки

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

просто тест :)

megabaks@netbook ~ $ export IMG="просто тест"
megabaks@netbook ~ $ echo $IMG
просто тест
megabaks@netbook ~ $ rm -rf $IMG
megabaks@netbook ~ $ ls -l | grep просто
drwxr-xr-x 2 megabaks 1018      48 Июл 14 21:19 просто тест
megabaks@netbook ~ $ rm -rf "$IMG"
megabaks@netbook ~ $ ls -l | grep просто
megabaks@netbook ~ $ 

megabaks ★★★★
()
#!/bin/bash 
sonata info > ~/.conky/sonata_info 
if [ -f ~/sonata ]; then 
   ART=$(cat ~/.conky/sonata_info | grep Исполнитель | cut -c 14-) 
   ALB=$(cat ~/.conky/sonata_info | grep Альбом | cut -c 9-) 
   echo ""$ART"-"$ALB".jpg" > ~/.conky/image 
   IMG=$(cat ~/.conky/image) 
   if [ -f "~/.covers/"$IMG"" ]; then 
      cp "~/.covers/"$IMG"" "~/.conky/currentcover.jpg" 
   else 
         cp "~/.conky/nocover.jpg" "~/.conky/currentcover.jpg" 
   fi 
else 
   exit 1 
fi

пробуй

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

Вот уж не подумал бы, что не умею пользоваться cp. Он теперь на

cp "~/.covers/"$IMG"" "~/.conky/currentcover.jpg"
выдает
cp: указанная цель «~/.conky/currentcover.jpg» не является каталогом

Insomnium ★★★★
() автор топика
Ответ на: комментарий от megabaks
#!/bin/bash  
sonata info > ~/.conky/sonata_info  
if [ -f ~/sonata ]; then  
   ART=$(cat ~/.conky/sonata_info | grep Исполнитель | cut -c 14-)  
   ALB=$(cat ~/.conky/sonata_info | grep Альбом | cut -c 9-)  
   echo ""$ART"-"$ALB".jpg" > ~/.conky/image  
   IMG=$(cat ~/.conky/image)  
   if [ -f ~/.covers/"$IMG" ]; then  
      cp ~/.covers/"$IMG" ~/.conky/currentcover.jpg  
   else  
         cp ~/.conky/nocover.jpg ~/.conky/currentcover.jpg  
   fi  
else  
   exit 1  
fi
megabaks ★★★★
()
Ответ на: комментарий от megabaks

Чую, от кого-то пивом пахнет... о чем это я. :} Спасибо, всё работает. А баш таки обещаю выучить.

Insomnium ★★★★
() автор топика

О, уже разобрались.

Вот мой черновик. Копирует без ошибок, но вместо костылей «Сонаты» используется прямой опрос MPD:

#!/bin/bash

if [[ $({ echo status; echo close; } | nc $MPD_HOST $MPD_PORT | egrep "state: play|state: pause") ]]; then
	ARTIST=`{ echo currentsong; echo close; } | nc $MPD_HOST $MPD_PORT |\
	grep '^Artist:' | cut -d ' ' -f2-`;
	ALBUM=`{ echo currentsong; echo close; } | nc $MPD_HOST $MPD_PORT |\
	grep '^Album:' | cut -d ' ' -f2-`;
	echo $ARTIST
	echo $ALBUM
	if [[ $(ls /home/gotf/test/images/"${ARTIST} - ${ALBUM}".jpg) ]]; then
		echo exists;
		cp ~/test/images/"${ARTIST} - ${ALBUM}".jpg ~/test/target/cover.jpg;
	else
		exit 1;
	fi
	else exit 2;
fi
GotF ★★★★★
()
Ответ на: комментарий от GotF

Кстати говоря, что можно почитать по shell-скриптам? Посмотреть бы хороший учебник. В программировании шарю, но до скриптов руки не доходили.

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

ну не поооомню я где брал )
на фтп свой линк не дал - лор-эффект (уже проходили) мне не нать )

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

Может быть, я просто не выспался, но какой-то он запутанный со всеми этими перекрестными ссылками. Как-то привык к последовательному изучению а-ля K&R, Шилдт, etc.

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

угу, есть такое. abs не справочник, его если ботать - то весь

vostrik ★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.