• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

kdialog meldet sich nicht / kann Fehler nicht entdecken

Hallo Leute

Ich experimentiere gerade in bischen mit kdialog.
Jetzt habe ich ein Script gebastelt das rein von von MEINER Logik her doch eigentlich funktionieren müsste. Auch set -x gibt mir leider keinen Aufschluss wo es noch hakt.

Meine Grundidee bei dem Script ist, das man es per Mausklick startet und in zwei Schritten man ein Lied auswählen kann. Erst wählt man den Ordner aus, und anschließen aus dem Ordner das Lied.

Leider hakt es auf Zeile 23.
Kdialog meldet sich in dieser Zeile einfach nicht mehr. Das seltsame ist aber das das Script eine Weile funktioniert hat und jetzt plötzlich nicht mehr. Ich komme aber ums verrecken nicht drauf was ich beim weiterexperimentieren verpfuscht haben könnte.

Entdeckt von euch jemand meinen Pfusch oder Fehler oder Irrtum?

Das Script (bzw Entwurf):
(Im Moment mehr eine Baustelle als ein Script)
Code:
     1  #!/bin/bash
     2
     3  #set -x
     4
     5  #Beschreibung:
     6  #Zur raschen Auswahl eines bestimmten Liedes.
     7  #Wenn auf der Kommandozeile kein Pfad übergeben wird, dann
     8  #wird der fest vorgegebene Pfad ausgewählt.
     9
    10  #Ordner auswählen
    11  pfade=(`find ~/AMAROK/ -type d | sort -u`)
    12  pfad=`kdialog --radiolist ${pfade[*]}`
    13
    14  #if [ ! ${pfad} ] ; then
    15  #       [ -f ~/.Schnellmusikwahl_Pfad.txt ] && pfad=`cat ~/.Schnellmusikwahl_Pfad.txt`
    16  #       [ ! -f ~/.Schnellmusikwahl_Pfad.txt ] && pfad=${HOME}
    17  #fi
    18
    19  set -x
    20  #Auswahl in Array schreiben und Dateienliste erstellen
    21  musik=(`find ${pfad} -name "*.mp3" | sort -u | head -n 100`)
    22  #aus Dateienliste Stück auswählen
    23  lied=`kdialog --radiolist ${musik[*]}`
    24  #[ ! ${lied} ] && lied=`cat ~/.Schnellmusikwahl_Lied.txt`
    25
    26  #Stück abspielen
    27  #killall vlc
    28  vlc ${lied} &
    29
    30  #verwendeter Pfad wird in versteckte Datei geschrieben
    31  #und nächstes mal automatisch wieder aufgerufen.
    32  #echo "${pfad}" > ~/.Schnellmusikwahl_Pfad.txt
    33  #echo "${lied}" > ~/.Schnellmusikwahl_Lied.txt
    34
    35  set +x

Gruß Peter
 

Escho

Advanced Hacker
Ich nehme an, kdialog ist ähnlich wie Xdialog. Hier sieht ein Aufruf so aus:
Code:
aktionenauswahl ()
{
was_tun=`Xdialog --no-cancel --radiolist "Was soll also getan werden?" 20 80 5 \
	"bearbeiten und auf DVD brennen" "" ON \
	"bearbeiten und DVD-Struktur in Datei sichern" "" off \
	"nur die DVD-Struktur brennen" "" off \
2>&1`
echo $was_tun
}

Edgar
 
OP
T

trommelpeter

Member
Hallo Escho

Ich werde da noch nicht ganz schlau draus. Ich habe dein Code-Schnipsel jetzt mal für sich getestet. Aber bei mir springt nur ein Fenster auf mit sämtlichen zur verfügung stehenden Optionen von Xdialog.

Gruß Peter
 

Escho

Advanced Hacker
Servus Peter

Das sollte eigentlich funktionieren, wenn du das mit cut und paste rüberziehst uns die Funktion wegmachst (aktionenauswahl () und die geschweiften Klammern).
Was ich dir zeigen wollte ist der Syntax von Xdialog, sprich daß du die Grösse des angezeigten Feldes angeben musst (z.B. 20 80 5).
Ich habe aber keine Ahnung, ob das in kdialog genauso ist.

Hier mal zum bessern Verständnis noch ein Link zu Xdialog:
http://xdialog.free.fr/

Edgar
 
http://developer.kde.org/documentation/tutorials/kdialog/x85.html

Fehlen da nicht Optionen beim kdialog ?
Statt "kdialog --radiolist pfada pfadb pfadc" sollte es nach meiner Meinung
kdialog --radiolist "wähle eine Pfad" 1 pfada on 2 pfadb off 3 pfadc off
Zeile 12 sollte also schon falsche Parameter erhalten.

Haveaniceday
 

Escho

Advanced Hacker
Hier hab ich noch eine prima Doku in Deutsch zu kdialog gefunden:
http://techbase.kde.org/index.php?title=Development/Tutorials/Shell_Scripting_with_KDE_Dialogs_%28de%29
Das könnte die Übersetzung des obigen Links sein.

Edgar
 
OP
T

trommelpeter

Member
Hallo

Das seltsame an meinem Skript ist, das es mal funktiniert und mal wieder nicht. Je kürzer der Pfad ist umso größer die Wahrscheinlichkeit das es so funktioniert wie ich es mir vorstelle.
Das ist wie mit einem Radio das einen Wackelkontakt hat wo man nie rausfindet wann es funktioniert und wann nicht.

Kdialog zeigt in der ersten Box in der Regel fast alle ermittelten Pfade an.
Nur bei der Auswahl eines Pfades geht irgendwas schief. Das Restliche Script rauscht dann einfach durch.
Ich habe hier praktisch ein Problem das für mich überhaupt keinen logischen Zusammenhang ergibt.

Gruß Peter
 
> Kdialog zeigt in der ersten Box in der Regel fast alle ermittelten Pfade an.
"fast" ist das Problem. Die Syntax ist falsch!

Code:
 1  #!/bin/bash
     2
     3  #set -x
     4
     5  #Beschreibung:
     6  #Zur raschen Auswahl eines bestimmten Liedes.
     7  #Wenn auf der Kommandozeile kein Pfad übergeben wird, dann
     8  #wird der fest vorgegebene Pfad ausgewählt.
     9
    10  #Ordner auswählen
    11  pfade=(`find ~/AMAROK/ -type d -exec echo {} {}  off \; | sort -u`)
    12  pfad=`kdialog --radiolist Pfade ${pfade[*]}`
    13
    14  #if [ ! ${pfad} ] ; then
    15  #       [ -f ~/.Schnellmusikwahl_Pfad.txt ] && pfad=`cat ~/.Schnellmusikwahl_Pfad.txt`
    16  #       [ ! -f ~/.Schnellmusikwahl_Pfad.txt ] && pfad=${HOME}
    17  #fi
    18
    19  set -x
    20  #Auswahl in Array schreiben und Dateienliste erstellen
    21  musik=(`find ${pfad} -name "*.mp3" -exec echo {} {}  off \;| sort -u | head -n 100`)
    22  #aus Dateienliste Stück auswählen
    23  lied=`kdialog --radiolist Musikstück ${musik[*]}`
    24  #[ ! ${lied} ] && lied=`cat ~/.Schnellmusikwahl_Lied.txt`
    25
    26  #Stück abspielen
    27  #killall vlc
    28  vlc ${lied} &
    29
    30  #verwendeter Pfad wird in versteckte Datei geschrieben
    31  #und nächstes mal automatisch wieder aufgerufen.
    32  #echo "${pfad}" > ~/.Schnellmusikwahl_Pfad.txt
    33  #echo "${lied}" > ~/.Schnellmusikwahl_Lied.txt
    34
    35  set +x
 
OP
T

trommelpeter

Member
Hallo haveaniceday

Vielen Dank für den hilfreichen Tipp. Funktioniert einwandfrei.
Jetzt fehlt nur noch das Verstehen. Ich komme nicht drauf was an meiner Synthax kongret falsch ist, und was kongret deine Veränderung bewirkt.

Also kongrete Frage :)
Warum konnte meine Syntax nicht funktionieren?
bzw
Warum oder wie funktioniert deine Syntax?

Wäre gut zu wissen, das ich für die Zukunft weis auf was ich achten muss.

Gruß Peter
 
kdialog
Code:
...
  --radiolist <text> [tag item status] ... Auswahldialog
 ...

Das heisst: "text" ist dein Boxtext.
Jeder einzelne Eintrag besteht aus drei Elementen: tag item status
Dabei ist tag der zurückgegebene Wert, item der angezeigte und status das Select "yes/no"
Wenn du also einen Pfad zurückbekomen möchtest musst du "tag" und "item" identisch machen. ( das sind die beiden {} {} die vom find ersetzt werden.
-exec echo {} {} no \; gibt also "pfad" "pfad" "no" für jedes/n item/Eintrag.

Dein Aufruf wurde dann gemäß der Syntax oben ausgewertet.

haveaniceday
 

Escho

Advanced Hacker
Ich bin gerade dabei, mein DVB-Script (im Wiki) von Xdialog auf kdialog umzustellen (Da ist diese Thread ein bißchen mit Schuld, denn ich kannte kdialog vorher noch nicht). Und ich muß sagen: Ich Vergleich zu Xdialog wesentlich einfacher.

Edgar
 

Spielwurm

Advanced Hacker
Ich beiße mir gerade die Zähne aus an einem Script zum Zusammensetzen von AVI-Filmen, wie sie Fotoapparate abliefern. Dabei brauche ich auch ein Array, deswegen ist dieser Beitrag interessant für mich.

Ich bin über die Zeile

Code:
set -x

gestolpert und habe sofort "man set" aufgerufen. Jedoch: kann mir jemand mal diese Zeilen auf deutsch in schlicht für einfache Gemüter erklären

Code:
-x      After expanding each simple command, for command, case command, select  command,  or  arith-
                      metic  for  command,  display  the  expanded  value  of PS4, followed by the command and its
                      expanded arguments or associated word list.

PS4 ???

Danke

Hartmut
 
OP
T

trommelpeter

Member
Hallo Hartmut

Beispiel:
bash -n archive_mp3.ps.sh
Damit testet man die Synthax

bash -x archive_mp3.ps.sh
Damit kann man das Script testen ob es sauber durchlauft. Probduziert sehr viel Ausgabe.

set -x
set +x
Ins Script eingefügt testet dies einen bestimmten Bereich, beginnend bei
set -x und endend bei set +x

Gruß Peter
 
"konqueror info:bash" sollte auch viele Infos bringen.
Grob gesagt schaltet set -x eine Art Debug ein und set +x dieses wieder aus.

Die Variable PS1 ist der normale Prompt am Anfang der Zeile. PS2 ist der Prompt
wenn eine Schleife, etc. angefangen wird.
PS4 kannte ich zwar noch nicht, es hört sich aber so an, als wenn bei set -x der Prompt
PS4 ist also der ausgegebene Prompt vor der Debugausgabe.

Haveaniceday

PS: Die Ausgabe des Prompt PS4 sieht bei mir seltsam aus. Der erste Buchstabe wird verdoppelt. Hmm, aber das muss ich nicht verstehen.
 
Oben