mpd jump artist

Azt szerettem volna megoldani, hogy zenelejátszás közben egyszerűen ugorhassak a listában a következő előadóra. Nem generált igény volt, magától merült fel.
Erre korábban írtam már egy helyes kis scriptet:


#!/bin/bash 
CURRENT=`mpc current | sed -e "s/\([^-]\+\) - .*/\1/"`
for ((;;));
do
	CHECK=`mpc current | sed -e "s/\([^-]\+\) - .*/\1/"`
	if [ "${CHECK}" = "${CURRENT}" ]; then
	mpc next
else
	break
fi
done

A szépsége az egyszerűségében rejlik, és körülbelül itt ki is fújt. A végtelen ciklusokat nem szeretem, főleg, hogy ez egy előadós lejátszólistánál ki se lépne ;) Ráadásul mindig az mpc-t hívogatja, és egyesével ugrál végig a listán, ami egy diszkográfia esetében, khm, szuboptimális. Ennek a shellscriptnek nem szabadna pár másodpercnél tovább futnia, mert akkor már nem érdemes használni.

Sokáig a todo listámon volt a kijavítása, már gondolkoztam azon is, hogy talán C-ben írom meg libmpd-vel (vagy inkább pythonban, mert úgy hamarabb végzek). De azért nekiugrottam megint shellsciptben, miután jobban körbeszaglásztam a lehetőségek terén.

ez lett a javított verzió

Ez több problémát orvosol. Például az mpc -f kapcsolóját használva meg tudja oldani, hogy csak az előadót nézze, így nem kellett regexppel kiszedni, ami hibás eredményt is adhatna. A sorszámra meg a lejátszólista hosszára sajnos nem találtam ilyen okosságot, oda maradt a regexp (ami viszont ebben az esetben nem téved)
Ezen kívül nem case sensitive, és nem hívja meg annyiszor az mpc-t, mint ahányszor a másik tehetné :)

Persze nem szép, úgyhogy aki velem ellentétben okosember bashből, kérem javítson ki.
- a lowercase konverzió szerintem elég csúnya. Van erre valami kulturált módszer seddel?
- van rá valami mód, hogy a bash csak a sortörések mentén bontsa tokenekre az adatot? Szerintem nem szép seddel alulvonásra cserélni a szóközöket.

Hozzászólások

Épp erre van most szükségem, köszi.