inQuake Forum - mehr braucht man nicht!
fc bayern muenchen 

Zurück   inQuake Forum - mehr braucht man nicht! > Themenforen > Linux/Unix Forum

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 25. März 2008, 15:34   #1
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
Standard need hilfe fuer ein kleines shell script

Advertising
Code:
#!/bin/bash

INFO=`mocp --info` 

if [ "$INFO" == "State: STOP" ];
then

echo -n ""

else

ARTIST=`mocp --info | grep Artist | cut -f2 -d :`
TITLE=`mocp --info | grep SongTitle | cut -f2 -d :`
ALBUM=`mocp --info | grep Album | cut -f2 -d :`

expr substr "$ARTIST -$TITLE [$ALBUM]" 1 500


fi
das ganze wird in conky ausgefuehrt, um das aktuelle lied mit interpret, titel und album zusehen.

atm sieht das so aus:
Code:
In Flames - Food for the Gods [ Whoracle]
wie man hier erkennt ist ein leerzeichen vor dem album namen (da ich das - genau an "$TITLE" geschrieben habe, kann man erkennen das er eigt. sogar 2 leerzeichen "schreibt"), das soll aber weg. idee wie ich das aendern kann?
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 25. März 2008, 17:56   #2
 
Benutzerbild von Spiritargh
Lucy
 
Registriert seit: Jan 2006
Beiträge: 834
sed 's/^[ \t]*//'

könnte klappen.
http://sed.sourceforge.net/sed1line.txt
__________________
http://www.quaddicted.com <- 1000 Quake Singleplayer Maps
Spiritargh ist offline   Mit Zitat antworten
Alt 25. März 2008, 19:12   #3
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
Code:
[...]ALBUM=`mocp --info | grep Album | cut -f2 -d | sed 's/^[ \t]*//' :[...]
Code:
[...]ALBUM=`mocp --info | grep Album | sed 's/^[ \t]*//' :`[...]
geht beides nicht, aber danke
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 25. März 2008, 19:17   #4
colo2
Guest
 
Beiträge: n/a
Code:
expr substr "$ARTIST -$TITLE [${ALBUM/ /}]" 1 500
sollte das erste Leerzeichen wegschnippeln.

Um die Eleganz des uebrigen Codes entsprechend zu wuerdigen, schweigen wir alle gemeinsam ein paar Minuten betreteten

Edith sagt: `man printf`
  Mit Zitat antworten
Alt 25. März 2008, 19:25   #5
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
<3
danke colo :*

(das script ist nicht von mir :F)
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 27. März 2008, 07:10   #6
edgewalker
Guest
 
Beiträge: n/a
Naja, also expr substr dient hier nur dazu, das erste Zeichen abzuschneiden. Und der Bindestrich ist an $TITLE drangeknallt. Offensichtlich haben sämtliche Wert vorn ein Leerzeichen zuviel. Daher stattdessen:
Code:
echo "${ARTIST# } - ${TITLE# } [${ALBUM# }]"
Aber mocp 4× aufzurufen (und grep und cut 3×) ist trotzdem nicht gerade der Eleganz letzter Schluss.

Code:
#!/bin/bash
mocp --info | while read LINE ; do
	[ "$LINE" = 'State: STOP' ] && exit
	X=$(expr "$LINE" :    'Artist[^:]*: \(.*\)') && ARTIST=$X
	X=$(expr "$LINE" : 'SongTitle[^:]*: \(.*\)') && TITLE=$X
	X=$(expr "$LINE" :     'Album[^:]*: \(.*\)') && ALBUM=$X
done

echo "$ARTIST - $TITLE [$ALBUM]"
Ich weiß nicht, wie das Ausgabeformat von mocp aussieht, sonst könnte ich wahrscheinlich diese hässlichen »[^:]*« etwas weniger hässlich schreiben. Wenn der Doppelpunkt in der Ausgabe immer direkt dem Schlüsselwort folgt, kann man die Dinger auch ganz weglassen.
  Mit Zitat antworten
Alt 27. März 2008, 07:39   #7
 
Benutzerbild von rob2xACCENTGRAVE
Keel
 
Registriert seit: Feb 2002
Beiträge: 2.700
sed -e "s/\[\ /\[/g"


würde auch gehn

edit:
wie siehtn die ausgabe vom mocp --info aus?
__________________
 
rob2xACCENTGRAVE ist offline   Mit Zitat antworten
Alt 27. März 2008, 09:12   #8
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
@edgewalker:

mit und ohne »[^:]*« geht es leider nicht :<

@rob``:

mocp --info
Code:
State: PLAY
File: /home/mcd/Musik/god_is_an_astronaut/god_is_an_astronaut-[2002]-the_end_of_the_beginning/the_end_of_the_beginning-01-the_end_of_the_beginning.mp3
Title: God Is an Astronaut - The End of the Beginning [The End of the Beginning]
Artist: God Is an Astronaut
SongTitle: The End of the Beginning
Album: The End of the Beginning
TotalTime: 04:15
TimeLeft: 04:14
TotalSec: 255
CurrentTime: 00:01
CurrentSec: 1
Bitrate: 192Kbps
Rate: 44KHz
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 27. März 2008, 09:28   #9
colo2
Guest
 
Beiträge: n/a
ALTER WAS MACHT DIE SAU FORENSOFTWARE MIT MEINEM SCRIPT FFS?!?!?!?! :mad: :mad:

Dann eben so, Version mit Singlequotes fuer sicher(er)es eval:: http://johannes.truschnigg.info/code/mocpinfo.sh.asc
  Mit Zitat antworten
Alt 27. März 2008, 13:31   #10
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
geht, danke
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 27. März 2008, 16:23   #11
edgewalker
Guest
 
Beiträge: n/a
Zitat:
Original geschrieben von colo2
http://johannes.truschnigg.info/code/mocpinfo.sh.asc


Wenn du das Anführungszeichen beim sed ganz vorne hinschreibst, kannst du dir ca. 300 Backslashes sparen. Du hast übrigens vergessen, dass der Wert selbst auf der rechten Seite auch Anführungszeichen enthalten könnte. Davon abgesehen ist die Gymnastik mit »^([^:]*): « völlig unnötig, weil du den linken Teil behalten willst und s/// eh immer das erste Vorkommen ersetzt, dh. du kannst einfach »s/: /='/« sagen (das Anführungszeichen muss natürlich entwertet werden), um denselben Effekt zu erzielen. Außerdem sollten die Schlüssel eigentlich am Zeilenanfang verankert sein, auch wenn das in der Praxis kaum zu Problem führen sollte. Summa summarum ergibt das:
Code:
sed -r '/^Artist|^SongTitle|^Album/!d; s/'\\''/'\\'\\\\\\'\\''/g; s/: /='\\''/; s/$/'\\''/'
(Ja, wirklich, der Rattenschwanz an Backslashes ist nötig.) Besonders schön ist das nicht… ebenso wenig wie das Konzept, die Ausgabe eines Programms in ein Shell-Skript umzuwandeln und dann auszuführen (obschon manchmal der kürzeste Weg).

Jetzt, wo ich die Ausgabe gesehen habe, würde ich einen ganz anderen Ansatz verfolgen.
Code:
#!/bin/bash
mocp --info | awk '
BEGIN { FS = ": " }
$1 == "State"     { do_print = "STOP" != $2 }
$1 == "Artist"    { artist = $2 }
$1 == "SongTitle" { title  = $2 }
$1 == "Album"     { album  = $2 }
END { if ( do_print ) printf "%s - %s [%s]\n", artist, title, album }
'
  Mit Zitat antworten
Alt 27. März 2008, 16:29   #12
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
gehen beide super, was soll ich nun nutzen?
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 27. März 2008, 16:29   #13
edgewalker
Guest
 
Beiträge: n/a
Meins.

Das kann nämlich auch jemand anders noch entziffern. (Aber wenn du das von colo nehmen willst, übernimm wenigstens meine Korrekturen.)
  Mit Zitat antworten
Alt 27. März 2008, 16:36   #14
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
ok, nutze deins.
danke an alle! \o/
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 27. März 2008, 16:42   #15
colo2
Guest
 
Beiträge: n/a
Zitat:
Original geschrieben von edgewalker
Meins.

Das kann nämlich auch jemand anders noch entziffern. (Aber wenn du das von colo nehmen willst, übernimm wenigstens meine Korrekturen.)
*jammer* *jammer* *jammer*

Ist doch kein Schoenheitswettbewerb hier!
  Mit Zitat antworten
Alt 01. April 2008, 22:42   #16
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
das script geht echt gut, aber ich habs nun erstmal aus :_

opera, irssi, bitlbee, mocp, mutt, rtorrent, snownews, htop und noch ein paar sachen brauchen zusammen ~8-10% vom CPU -- das script alleine ~2-4%, es ist einfach zu gierig mit dem 'mocp --info' spam. :<
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 01. April 2008, 22:53   #17
 
Benutzerbild von Snoopy
Dopefish
 
Registriert seit: Feb 2002
Beiträge: 4.701
Mal ne kurze Frage, kann man nicht irgendwie die Abfrage nur dann ausführen lassen, wenn das Lied wechselt?
__________________
Als Hirte erlaube mir, zu dienen meinem Vater dir. Deine Macht reichst Du uns durch Deine Hand, diese verbindet uns wie ein heiliges Band. Wir waten durch ein Meer von Blut, Herr gib uns dafür Kraft und Mut. in nomine patris et filii et spiritus sancti...
Der blutige Pfad Gottes - The Boondock Saints

"Mehr als das Gold, hat das Blei die Welt verändert." - Georg C. Lichtenberg

Semper fidelis
Snoopy ist offline   Mit Zitat antworten
Alt 01. April 2008, 22:55   #18
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
das waere sinnvoll :>
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 02. April 2008, 08:27   #19
colo2
Guest
 
Beiträge: n/a
Wenn die Player-Software die Info nicht irgendwohin pusht, dann kommt man um pollen nicht herum, nein. Ist das Ding da ein Client fuer mpd?
  Mit Zitat antworten
Alt 02. April 2008, 13:58   #20
 
Benutzerbild von Scratchy
Assist
 
Registriert seit: Dez 2001
Beiträge: 5.605
ne, kein mpd client :>

--> http://moc.daper.net/about
__________________
Scratchy ist offline   Mit Zitat antworten
Alt 02. April 2008, 16:26   #21
ryz
 
Benutzerbild von ryz
Cadavre
 
Registriert seit: Aug 2004
Beiträge: 3.346
QLive Nick: afk|moDem
Steam Nick: ryz_
PSN Nick: ryz_
XBL Nick: ryzawy
gibt nochn anderes conky-moc-script das ballert die info in verschiedene files, dann wird nicht immer gepollt. ich suchs mal und editiers hier rein
__________________
[center]
#konsolen | twitter | raptr.com | playfire.com
ryz ist offline   Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0


ingame Netzwerk
Support | AGB | Probleme mit der Werbung melden
Online Werbung | Mediadaten | Unternehmen | Karriere | Presse | Impressum

© ingame GmbH, ingame™, in™ und incup™ sind eingetragene Markenzeichen der ingame GmbH. Verwendung von Inhalten nur mit schriftlicher Genehmigung.