Re: Kommandozeile fuer dialog im Bashskript bauen
High, high ... * Andreas Pakulat [EMAIL PROTECTED] schrieb am [19.08.05 21:26]: On 19.Aug 2005 - 19:57:16, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: On 19.Aug 2005 - 18:46:08, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Wieso nicht TITEL=Titel mit Leerzeichen OTHEROPTS=60 15 5 /usr/bin/dialog $defaultloc $timeout --menu $TITEL $OTHEROPTS $environments :-) Der Menutitel ist nich das eigentliche Problem, sondern environments. Das wird generiert, damit der Nutzer spaeter einfach Alles Zshell, fuer die Bash geht das folgende bestimmt auch aehnlich. Das mit den Environments habe ich ueber ARRAYs geloest, das ist ziemlich einfach (Bsp.): for VAR in $Werte ; { ARRAY[ANZ]=\$VAR\ \\ (( ANZ++ )) } Durch das Quoting kannst Du auch Leerzeichen benutzen. Ich habe mir (Zshell) Funktionen fuer menue, ..., geschrieben die auch gleich die Spalten und Zeilenlaenge des Terminal berechnen. Das mit den Variablen TITLE MSG kannste auch anders machen, das soll eh demnaechst von gettext (locale) geloest werden. Aber vielleicht ist dies ja fuer dich eine Anregung. Alle Scripts initialisieren sich durch die Funktion script_init, welches vorab die Funktionspfade und einige Variablen generiert. Durch eval wird alles in einer Subshell ausgefuehrt, dadurch hast du weniger Probleme mit generierten Variablen, ausser du exportierst diese. # Funktion menue # # benötigt die Funktion return_check # # usage: menue -v TITLE_NAME $ARRAY (-v = Variable) #menue -s TITLE_NAME ARRAY_NAME (-s = */msg/$LANGUAGE/share) #menue TITLE_NAME ARRAY_NAME #TITLE_NAME - Der TITLE_NAME wird aus der */msg/$LANGUAGE/title gelesen #ARRAY_NAME - Der ARRAY_NAME wird aus der */msg/$LANGUAGE/$SCRIPTNAME gelesen #ARRAY - Array mit Werten die man auswaehlen kann. # menue () { if [ $# -ge 2 ] ; then MSG=${${(s.;.)${(M)${(f)$( ${MSG_FILE%/*}/share)}##(s#)menuepunkt;*}}[2]} if [ $1 = -v ] ; then TITLE=${${(s.;.)${(M)${(f)$( ${MSG_FILE%/*}/title)}##(s#)${2};*}}[2]} MENUE_ARRAY=(${3[*]}) elif [ $1 = -s ] ; then TITLE=${${(s.;.)${(M)${(f)$( ${MSG_FILE%/*}/title)}##(s#)${2};*}}[2]} MENUE_ARRAY=(${${(s.;.)${(M)${(f)$( ${MSG_FILE%/*}/share)}##(s#)${3};*}}[2]}) else TITLE=${${(s.;.)${(M)${(f)$( ${MSG_FILE%/*}/title)}##(s#)${1};*}}[2]} MENUE_ARRAY=(${${(s.;.)${(M)${(f)$( $MSG_FILE)}##(s#)${2};*}}[2]}) fi (( [EMAIL PROTECTED] )) (( Elemente = Elemente/2+1 )) Overhead=7 if [ $[Elemente+Overhead] -lt $[LINES-4] ]; then (( DisplayLines = Elemente+Overhead )) else (( DisplayLines = LINES-6 )) (( Elemente = DisplayLines-8 )) fi DialogTitle=--title \${SCRIPTNAME}::${TITLE}\ $DialogBackTitle DialogLabel=--ok-label $OK --help-button --help-label $HILFE --cancel-label $ABBRECHEN DialogPara=--clear --menu \$MSG\ $DisplayLines $[COLUMNS-8] $Elemente ${MENUE_ARRAY[*]} eval $Dialog $DialogLabel $DialogTitle $DialogPara $DialogReDirect return_check else no_para_msg $0 fi } Sorry, wegen der Zeilenueberlaenge (72), ist halt copy Paste (vim). Die Sourcen kannst du dir unter ftp://ftp.berlios.de/pub/netzworkk/scripts/kwtools/Sources/0.4/ laden und ansehen. mfg Kiste -- ### Netzworkk Kai Wilke [EMAIL PROTECTED] http://www.netzworkk.de http://netzworkk.berlios.de signature.asc Description: Digital signature
Re: Kommandozeile fuer dialog im Bashskript bauen
On 20.Aug 2005 - 13:08:48, Kai Wilke wrote: High, high ... * Andreas Pakulat [EMAIL PROTECTED] schrieb am [19.08.05 21:26]: On 19.Aug 2005 - 19:57:16, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: :-) Der Menutitel ist nich das eigentliche Problem, sondern environments. Das wird generiert, damit der Nutzer spaeter einfach Alles Zshell, fuer die Bash geht das folgende bestimmt auch aehnlich. Das mit den Environments habe ich ueber ARRAYs geloest, das ist ziemlich einfach (Bsp.): for VAR in $Werte ; { ARRAY[ANZ]=\$VAR\ \\ (( ANZ++ )) } Durch das Quoting kannst Du auch Leerzeichen benutzen. Ja, mein Problem war eben, das beim Ausfuehren von dialog das Quoting wieder weg war, ebend wegen des fehlenden eval davor... Ich habe mir (Zshell) Funktionen fuer menue, ..., geschrieben die auch gleich die Spalten und Zeilenlaenge des Terminal berechnen. Danke, aber genau das will ich ebend nicht, sonst haette ich gleich bei netenv bleiben koennen. Mein mininetenv sollte moeglichst klein, uebersichtlich und einfach konfigurierbar sein. Da brauch ich keine Funktionen die das Menue zusammenbaut, eine kleine Schleife tuts da auch... Die Sourcen kannst du dir unter ftp://ftp.berlios.de/pub/netzworkk/scripts/kwtools/Sources/0.4/ laden und ansehen. Wie gesagt, nett gemeint, aber soviel mache ich ja auf der Shell nicht, dass sich da eigene Funktionen lohnen wuerden. Landet aber auf jeden Fall in meiner Examples-Sammlung, manchmal brauch man sowas ja dann doch irgendwann. Andreas -- Troubled day for virgins over 16 who are beautiful and wealthy and live in eucalyptus trees. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Kommandozeile fuer dialog im Bashskript bauen
Hi, nicht meckern, ist leicht OT, aber hier krieg ich vermutlich am schnellsten Hilfe... Ich will eine ausfuehrbares Kommando fuer dialog zusammenbauen. Einige Werte kommen aus einer mittels . gesourcten Config-Datei, einige baue ich mittels var=wert selbst zusammen. Mein Problem ist, das einige Elemente mittels umfasst werden muessen, damit dialog sie als eine Optionen mitkriegt und nicht als mehrere. Das waere z.B. der Titel des Dialogs, leider schlaegt TITEL=\Titel mit leerzeichen\ dialog ... -menu $TITEL genauso fehl wie dialog ... -menu $TITLE und mir fehlen irgendwie die Ideen was ich noch austesten kann. Kurzversion des Skripts sieht so aus: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Fehlermeldung dafuer ist: Error: Expected 2 arguments, found only 1. Wenn ich um die letzten beiden setze gibts: Error: Expected at least 6 tokens for --menu, have 2. Diverse Varianten mit oder ' statt \ haben auch nicht gefruchtet :-( Ich wollte eigentlich ein von nem Init-Skript aufgerufenes Skript in Python schreiben... Andreas -- Avoid reality at all costs. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Kommandozeile fuer dialog im Bashskript bauen
Andreas Pakulat [EMAIL PROTECTED] wrote: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Wieso nicht TITEL=Titel mit Leerzeichen OTHEROPTS=60 15 5 /usr/bin/dialog $defaultloc $timeout --menu $TITEL $OTHEROPTS $environments Gruß, Frank -- Frank Küster Inst. f. Biochemie der Univ. Zürich Debian Developer
Re: Kommandozeile fuer dialog im Bashskript bauen
On 19.Aug 2005 - 18:46:08, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Wieso nicht TITEL=Titel mit Leerzeichen OTHEROPTS=60 15 5 /usr/bin/dialog $defaultloc $timeout --menu $TITEL $OTHEROPTS $environments :-) Der Menutitel ist nich das eigentliche Problem, sondern environments. Das wird generiert, damit der Nutzer spaeter einfach item1,beschreibung mit Lerrzeichen:item2,... konfigurieren kann. Und genau da hakts, wenn ich environment mittels: for env desc in $ENVIRONMENTS ; do environments=$environments $envname \$desc\ done setze und dann oben anfuege ala dialog ... --menu $MENUTITLE $MENUOPTS $environments (mit oder ohne um environments), meckert dialog, weil er 2 Argument zuwenig bekommt, denn dialog sieht dann nicht item1 Beschreibung mit Leerzeichen item2 ... sondern eben item1 Beschreibung mit Leerzeichen item2 ... :-( Andreas -- You've been leading a dog's life. Stay off the furniture. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Kommandozeile fuer dialog im Bashskript bauen
On 19.Aug 2005 - 17:05:00, Andreas Pakulat wrote: Hi, nicht meckern, ist leicht OT, aber hier krieg ich vermutlich am schnellsten Hilfe... So, auch wenn Crossposting nicht gut ist, hatte ich zwischenzeitlich noch in de.comp.os.shell (glaub ich, naja in der shell-NG) gefragt, die Loesung ist eval dialog $dialogopts wobei dialogopts so gesetzt wird: dialogopts=--menu \$MENUTITLE\ $MENUOPTS $environments MENUTITLE und MENUOPTS sind einfache Texte ohne weitere drin, environments sieht dann so aus: environments=item1 \Beschreibung 1\ item2 \Beschreibung 2\ Andreas -- You have an unusual understanding of the problems of human relationships. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Kommandozeile fuer dialog im Bashskript bauen
Andreas Pakulat [EMAIL PROTECTED] wrote: On 19.Aug 2005 - 18:46:08, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Wieso nicht TITEL=Titel mit Leerzeichen OTHEROPTS=60 15 5 /usr/bin/dialog $defaultloc $timeout --menu $TITEL $OTHEROPTS $environments :-) Der Menutitel ist nich das eigentliche Problem, sondern environments. Das wird generiert, damit der Nutzer spaeter einfach item1,beschreibung mit Lerrzeichen:item2,... Du schreibst doch gerade ein mini-netenv. Dann schau doch mal im großen netenv nach. Auf die Schnelle verstehe ich zwar die Funktion choose_network_environment() auch nicht mehr, aber sie funktioniert ;-) Gruß, Frank -- Frank Küster Inst. f. Biochemie der Univ. Zürich Debian Developer
Re: Kommandozeile fuer dialog im Bashskript bauen
On 19.Aug 2005 - 19:57:16, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: On 19.Aug 2005 - 18:46:08, Frank Küster wrote: Andreas Pakulat [EMAIL PROTECTED] wrote: MENUOPTS=\Titel mit Leerzeichen\ 60 15 5 environments=item1 \desc 1\ item2 \desc 2\ defaultloc=--default-item item2 timeout=--timeout 5 /usr/bin/dialog $defaultloc $timeout --menu $MENUOPTS $environments Wieso nicht TITEL=Titel mit Leerzeichen OTHEROPTS=60 15 5 /usr/bin/dialog $defaultloc $timeout --menu $TITEL $OTHEROPTS $environments :-) Der Menutitel ist nich das eigentliche Problem, sondern environments. Das wird generiert, damit der Nutzer spaeter einfach item1,beschreibung mit Lerrzeichen:item2,... Du schreibst doch gerade ein mini-netenv. Dann schau doch mal im großen netenv nach. Auf die Schnelle verstehe ich zwar die Funktion choose_network_environment() auch nicht mehr, aber sie funktioniert ;-) Genau deswegen hab das das mini-netenv geschrieben, weil mir das grosse viel zu komplex zu konfigurieren war. Da werd ich bestimmt nicht anfangen im Source zu wuehlen, war schon bei usbmount ein Krampf und das isst deutlich schlanker... Andreas -- You have a strong appeal for members of the opposite sex. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)