Re: Kommandozeile fuer dialog im Bashskript bauen

2005-08-20 Diskussionsfäden Kai Wilke
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

2005-08-20 Diskussionsfäden Andreas Pakulat
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

2005-08-19 Diskussionsfäden Andreas Pakulat
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

2005-08-19 Diskussionsfäden Frank Küster
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

2005-08-19 Diskussionsfäden Andreas Pakulat
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

2005-08-19 Diskussionsfäden Andreas Pakulat
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

2005-08-19 Diskussionsfäden Frank Küster
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

2005-08-19 Diskussionsfäden Andreas Pakulat
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)