Problem mit dialog --form

09/10/2011 - 22:18 von Steffen Buhr | Report spam
Hallo allerseits,

für ein Skript will ich einen Dialog mit mehreren Eingabefeldern bauen,
bei dem nicht immer alle Felder einen Inhalt haben werden. Aber ich
kriege keine saubere Zuordnung hin, wenn ein Feld leer bleibt.

1. Beispiel, Ausgabe nach OK ohne weitere Eingaben
#!/bin/bash
for e in `dialog --stdout\
'T1' 2 5 'V1' 2 10 20 10\
'T2' 3 5 '' 3 10 20 10\
'T3' 4 5 'V3' 4 10 20 10`; do
echo $e
done
steffen@No2:~> ./dialog1.sh
V1
V3
steffen@No2:~>

Das ist nicht das was ich brauche, denn in der Ausgabe fehlt eine
Leerzeile zwischen V1 und V3.

2. Beispiel
#!/bin/bash
tmp="/tmp/tmp.$$"
dialog --stdout\
'T1' 2 5 'V1' 2 10 20 10\
'T2' 3 5 '' 3 10 20 10\
'T3' 4 5 'V3' 4 10 20 10 > $tmp
for e in `cat $tmp`; do
echo $e
done
rm $tmp

Wieder nichts, gleiches Ergebnis; in der tmp ist es selbstredend noch
richtig. Eigene Trennzeichen gehen auch nicht, weil (blinde) Felder mit
flen=0 keine Ausgabe erzeugen. Im Netz fand sich noch ein Beispiel, bei
dem flen auf -20 gesetzt ist.
http://www.cc-c.de/german/linux/linux-dialog.php Das funktioniert aber
(auch mit -1) nur beim ersten oder zweiten Feld, weiter unten gibts
Speicherzugriffsfehler. Gugel förderte noch folgenden Vorschlag zutage
http://groups.google.com/group/de.c...4ec6c64ecf

3. Beispiel
#!/bin/bash
tmp="/tmp/tmp.$$"
dialog …

IFStmp="$IFS"
IFS="
"
set -- `cat $tmp`
IFS=$IFStmp
echo $1
echo $2
echo $3
rm $tmp
steffen@No2:~> ./dialog3.sh
V1
V3

steffen@No2:~>

Drei Ausgabezeilen, aber verkehrte Reihenfolge. Was tun?

GNU bash, version 3.00.16(1)

X&→ dcous

Gruß
Steffen - neu hier
 

Lesen sie die antworten

#1 Stefan Reuther
09/10/2011 - 23:32 | Warnen spam
Steffen Buhr wrote:
für ein Skript will ich einen Dialog mit mehreren Eingabefeldern bauen,
bei dem nicht immer alle Felder einen Inhalt haben werden. Aber ich
kriege keine saubere Zuordnung hin, wenn ein Feld leer bleibt.

1. Beispiel, Ausgabe nach OK ohne weitere Eingaben


[...]
for e in `cat $tmp`; do


[...]
Wieder nichts, gleiches Ergebnis; in der tmp ist es selbstredend noch
richtig.


[...]
set -- `cat $tmp`



Ungetesteter Schnellschuss:

Gemeinsames Element in allen drei Fàllen ist ``, was den Leerraum
vernichtet. Ich würde da jetzt mal mit sowas wie
exec <$tmp
read a
read b
read c
beginnen, um die Daten zeilenweise zu lesen.


Stefan

Ähnliche fragen