dialog --inputbox ???

Post Reply
Message
Author
Shell

dialog --inputbox ???

#1 Post by Shell »

hi

dialog --clear --title "Menu" --inputbox "Eingabe" 8 32 <???> && echo <???>

durch was ersetze ich <???>, damit das hinhaut ... ich habe schon einiges probiert, aber funzt ned.

danke

Jochen

Re: dialog --inputbox ???

#2 Post by Jochen »

Mit was für einem dialog arbeitest Du? 0.9a? Und was willst Du eigentlich ausgegeben haben? Das, was Du eingegeben hast?

Ein paar Möglichkeiten:<pre>dialog ... 2>/tmp/tmpdat.$$ && cat /tmp/tmpdat.$$ ; rm -f /tmp/tmpdat.$$</pre>oder<pre>VAR=$(dialog ... 2>&1)</pre>Mittels $? kannst Du dann rauskriegen, ob "Cancel" gewählt wurde, oder kombinier's direkt mit 'ner Fehlerbehandlung:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
if VAR=$(dialog --clear --title 'Hi!' --inputbox "Eingabe" 8 32 "Vorgabewert" 2>&1)
then
echo "Erfolg, Eingabe ist $VAR"
else
echo "Eingabe wurde abgebrochen oder sonstiger Fehler"
fi
</font><hr></pre></blockquote>

So, und wenn's jetzt immer noch nicht funzt, wäre die Fehlermeldung recht hilfreich, die dialog (oder die Shell?) ausschmeisst und die in Deinem ersten Posting leider gefehlt hat. ("funzt net" lässt eine ziemlich breite Auslegung zu...)

Jochen

Shell

Re: dialog --inputbox ???

#3 Post by Shell »

oh sorry ...

Das ist meine derzeitige Lösung:

dialog --clear --title "TITEL" --inputbox "Eingabe" 8 32 2>/tmp/.input
VAR="´cat /tmp/.input`";
echo $VAR
rm -f /tmp/.input

Eine Fehlermeldung hatte ich voreher nicht .... ich bekam einfach nur keine Ausgabe, da ich das über eine Variable lösen wollte.
- Versionsnummer weiß ich grade net (nutze RedHat 6.2) <- die integrierte version.

Shell

kleine Frage am Rande: was ist der Unterschied zwischen

>/tmp/test
2>/tmp/test
>2&1/tmp/test

???????
woher weiß ich, wann ich welches nutzen soll ?

Jochen

Re: dialog --inputbox ???

#4 Post by Jochen »

Na ja, auf die Tour braucht man halt eine Extra-Datei. Und wenn man dann das Skript abbricht, bleibt sie noch irgendwo liegen, und bei mehreren gleichzeitig laufenden Instanzen Deines Skriptes überschreiben sich die Dateien vielleicht gegenseitig usw. usf.

Also würde ich Dir weiterhin <pre>VAR=`dialog --inputbox ... 2>&1`</pre>empfehlen, da Du Dir diese ganzen Probleme ersparst.

Soooo, und jetzt zu Deiner "kleinen Frage am Rande"! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Typischerweise hat bekommt ein Programm unter Unix zur Ein-/Ausgabe drei Dateideskriptoren mit:

0 = Standardeingabe (stdin)
1 = Standardausgabe (stdout)
2 = Standardfehlerausgabe (stderr)

Die Standardeingabe ist per Default mit dem Terminal, an dem Du arbeitest, verknüpft, also mit Deiner Tastatur. Soll ein Programm statt dessen aus einer Datei lesen, kann man mit der Dateieingabeumlenkung "<" arbeiten. Dadurch verknüpft die Shell die Standardeingabe mit der folgenden Datei, und das Programm liest statt von der Tastatur aus der Datei. Das bleibt übrigens für das Programm vollkommen transparent: Wo die Daten herkommen, die es über stdin erhält, ist ganz gleichgültig!

Das gleiche gilt auch für stdout, die Standardausgabe. Sie kann man mittels ">" oder in Langform mit "1>" umlenken. Dadurch erscheinen die Ausgaben des Programms nicht mehr am Terminal, sondern werden in die Datei gelenkt, die auf das ">" folgt.

Das "|"-Zeichen verknüpft die Standardausgabe des ersten Kommandos mit der Standardeingabe des ersten Kommandos.

Problem: Was, wenn eines der Programme nun einen Fehler melden muss? Man würde ja nichts mehr davon sehen. daher gibt es zusätzlich auch noch stderr, die Standardfehlerausgabe. Auch wenn stdout in eine Datei oder in eine Pipe umgelenkt wurde, erscheinen Ausgaben über stderr immer noch am Monitor! Umlenken kann man die Ausgaben (z.B. füpr spätere genauere Betrachtung mittels "2>" (Nummer der Deskriptors und Ausgabeumlenkungszeichen).

So weit, so gut? Schön. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Dann woll'n mer mal konkret werden:
">/tmp/dat" lenkt also die Standardausgabe des Kommandos um in die Datei /tmp/dat.
"2>/tmp/dat" lenkt die Standardfehlerausgabe des Kommandos um in die Datei /tmp/dat.
">2&1/tmp/test" gibt es so nicht. Meintest Du vielleicht ">/tmp/test 2>&1"? Das hiesse "Lenke stdout um nach /tmp/test, und stderr dahin, wo stdin hinzeigt". Es ist also nur eine Kurzform für ">/tmp/test 2>/tmp/test".

Etwas klarer, das ganze? dialog ist nun gerade nicht das tollste Programm, um diese Grundlagen zu verstehen, da dialog etwas klüger ist und sein Menü <i>nicht</i> über den Mechanismus wie o.a. auf den Schirm bringt. Aber es verwendet stderr, um die Eingabe auszugeben. Wenn ich nun mit der Kommandosubstitution (`dialog --...`) arbeite, muss ich stderr dahin lenken, wo stdin hinzeigt, damit ich hinterher den Wert für die Variable dort eingesetzt bekomme: "2>&1".

Woher man weiss, wie dialog das macht? Oh, gaaanz einfach: "man dialog" <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Mit dem Hintergrundwissen hier solltest Du dann die Verweise auf STDERR und so verstehen können.

Jochen

P.S.: Schön, dass Du geantwortet hast! <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Shell

Re: dialog --inputbox ???

#5 Post by Shell »

Hey .. danke für deine informativen Antworten... haben mir schon sehr viel geholfen.

VAR=$(dialog --clear --title 'Hi!' --inputbox "Eingabe" 8 32 "Vorgabewert" 2>&1) <- funktioniert bei meiner Version offensichtlich nicht, denn der Bildschirm wird schwarz und am obersten linken Eck blinkt der Cursor

Gruß B.

Jochen

Re: dialog --inputbox ???

#6 Post by Jochen »

Wird wohl 'ne ältere Version sein (0.7?). Laut der "Dialog Home Page" (<a href="http://www.advancedresearch.org/dialog/)" target="_blank"><!--auto-->http://www.advancedresearch.org/dialog/)</a><!--auto--> gibt es einfach mehrere Branches von einer 0.6er Version aus. Die "offiziellste" davon ist wohl hier (<a href="ftp://ftp.us.debian.org/debian/pool/main/d/dialog/)" target="_blank"><!--auto-->ftp://ftp.us.debian.org/debian/pool/main/d/dialog/)</a><!--auto--> zu finden. Übrigens, ein "rpm -q dialog" sagt Dir die Versionsnummer. Bei RH7.2 (meine Referenz) ist es die 0.9a. Neu übersetzen, installieren und geniessen...

Jochen

Post Reply