ottscho
Goto Top

variable setzen und prüfen CSH

Hallo zusammen,

ich versuche mich gerade etwas an Scripten mit der CSH in Verbindung mit einer GUI (Zenity).
Ich habe hier ein Script, und würde gerne den Autput von Zenity direkt in eine Variable schreiben, und nicht erst in eine Datei und dann mit tail die Datei lesen und in eine Varibale schreiben.
Außerdem würde ich gerne die Variable auf Inhalt prüfen und bekomme es nicht hin. Ich denke es liegt an dem einlesen mit trail.

Bitte gebt mir mal einen Tipp:

[code]
#!/bin/tcsh
set echo

LftNr:
#Laufkartennummer festlegen
zenity --entry --title="2D Barcode PRINTAR" --text="Geben Sie bitte die LfkNummer an:" --entry-text="" >> /tmp/lftnr
set strLftNr = `tail -l /tmp/lftnr`
rm -f /tmp/lftnr
echo "####"$strLftNr"####"

Index:
#Index Wert festlegen
zenity --entry --title="2D Barcode PRINTAR" --text="Geben Sie bitte einen Index Wert an:" --entry-text="" >> /tmp/index
set strIndex = `tail -l /tmp/index`
rm -f /tmp/index
echo "####"$strIndex"####"

#Lagenbezeichnung festlegen
zenity --list --radiolist --width=400 --height=150 --title "2D Barcode PRINTAR" --text "Wählen Sie bitte die Lagenkennzeichnung aus:" --column=" " --column Variable --column Beschreibung \
"\" TWE "Bauteilseite = B / Lötseite = L" \
"\" PHG "Bauteilseite = LCS / Lötseite = LBS" \
/tmp/date
set strLage = `tail -l /tmp/lage`
rm -f /tmp/lage
echo "####"$strLage"####"

#Datumsforamt festlegen
zenity --list --radiolist --width=400 --height=200 --title "2D Barcode PRINTAR" --text "Wählen Sie bitte das Datumformat aus:" --column=" " --column Variable --column Beschreibung \
"\" %W%y "Kalenderwoche / Jahr 2-stellig" \
"\" %W%Y "Kalenderwoche / Jahr 4-stellig" \
"\" %x "Monat/Tag/Jahr 2-stellig" \
/tmp/date
set strDate = `tail -l /tmp/date`
rm -f /tmp/date
echo "####"$strDate"####"

#Reihefolge festlegen
zenity --list --radiolist --width=400 --height=325 --title "2D Barcode PRINTAR" --text "Wählen Sie bitte die Reihenfolge aus:" --column=" " --column Variable --column Beschreibung \
"\" ULC_RIGHT "LinksOben->RechtsUnten - Horizontal" \
"\" ULC_DOWN "LinksOben->RechtsUnten - Vertiakl" \
"\" DLC_RIGHT "LinksUnten->RechtsOben - Horizontal" \
"\" DLC_UP "LinksUnten->RechtsOben - Vertiakl" \
"\" DRC_LEFT "RechtsUnten->LinksOben - Horizontal" \
"\" DRC_UP "RechtsUnten->LinksOben - Vertiakl" \
"\" URC_LEFT "RechtsOpen->LinksUnten - Horizontal" \
"\" URC_DOWN "RechtsOebn->LinksUnten - Vertiakl" \
/tmp/counter
set strCounter = `tail -l /tmp/counter`
rm -f /tmp/counter
echo "####"$strCounter"####"
[/code]

Content-ID: 91040

Url: https://administrator.de/contentid/91040

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

1bgks6
1bgks6 06.07.2008 um 05:02:52 Uhr
Goto Top
Zumindest solltest Du nie ohne weitere Prüfung an eine Datei mit festem Namen schreiben. Falls mehrere Instanzen des Scripts laufen schreiben die bunt durcheinander in die Datei. Üblich wäre, die zwangsläufig zur Laufzeit eineindeutige PID der jeweiligen Instanz für den Dateinamen zu verwenden. Natürlich ist grundsätzlich blödsinnig, auf der Disk rumzuschreiben, wo Pipes verfügbar sind.

Was hält Dich davon ab, ganz einfach den Umweg über die Dateiausgabe zu eliminieren und den stdout des zenity direkt an die Variable zu übergeben?

set strSchnick = `zenity --schnack`

Was mißglückt Dir beim Testen der Variablen auf Inhalt? Auf welchen Inhalt? Was genau gibt zenity zurück?
ottscho
ottscho 07.07.2008 um 07:49:54 Uhr
Goto Top
ich hatte es schon so oft auf diese Methode "set strSchnick = `zenity --schnack`" versucht, aber es ging nie. Eben hat es funktioniert. Vllt habe ich aus meiner Dummheit die ` Zeichen in die falsche Richtung gemacht... Danke dir

Nun muss ich überprüfen, ob der User überhaupt was angegeben hat, oder ob die Varibale leer ist.
Die habe ich nun mit if ($var != "") gemacht.


Weißt du zufällig noch, wo die CSH die Rückgabewerte speichert? Bei der BASH ist ist $?
Ich muss ja irgendwie herausfinden, wenn der User abbrechen drückt.

Danke
Gruß ottscho
1bgks6
1bgks6 07.07.2008 um 14:39:16 Uhr
Goto Top
Der Exit-Status des zuletzt ausgeführten Kommandos steht bei CSH in der vordefinierten Umgebungsvariablen »status«. Aufzupassen ist, welches das tatsächlich zuletzt ausgeführte Kommando ist: hier ist es nicht zenity, sondern set.

Möglichkeiten*:

a) Die Nutzereingaben sind immer nur eine Auswahl aus den mir bekannten Vorgaben:
set strSchnick = `zenity --text 'Nie ABBRUCH' || echo 'ABBRUCH'`  
if( $strSchnick == 'ABBRUCH' ) then schießmichtot  

b) Standardlösung: Abbruch der Eingabemaske bricht die gesamte Programmausführung ab (oder bei entsprechender Vorbreitung die jeweilige Subshell)*:
set strSchnick = `zenity --schnack || exit $status`

*) Bei der (b)-Lösung springt das exit schlimmstenfalls lediglich aus der ``-Subshell raus. Sind nur strukturelle Vorschläge, ich kann nicht testen. Besserenfalls scheitert das set sowieso bzw. termininert mit einem von 0 abweichenden Status, wenn zenity wegen Nutzerabbruch mit einem von 0 abweichenden terminiert und dann auch keinen Leer-String auf stdout rückgib.
ottscho
ottscho 07.07.2008 um 16:06:44 Uhr
Goto Top
danke, für deine ausführliche beschreibung.

leider geht es nicht. ich habe folgendes versucht:
#Laufkartennummer festlegen

ganz am ende der datei habe ich dann ein test:
leider kommt hier die meldung;
Script message: zenity --entry --title=2D Barcode PRINTAR --text=Geben Sie bitte die LfkNummer an: --entry-text=1654322 --window-icon=/usr/share/pixmaps/accessx-status-applet/sticky-super-latched.png
Script message: goto test
Script message: test: label not found.

Ebenso habe ich es einfach nur mit der exit versucht, hier kommt folgendes, aber es passiert nichts:
Script message: zenity --entry --title=2D Barcode PRINTAR --text=Geben Sie bitte die LfkNummer an: --entry-text=1654322 --window-icon=/usr/share/pixmaps/accessx-status-applet/sticky-super-latched.png
Script message: exit

alles etwas sehr merkwürdig.
falls dich das ganze script interessiert, hier findest du es:
www.tw-elektric.de/temp/Printar_2D_Barcode.csh

Gruß Ottscho
ottscho
ottscho 08.07.2008 um 15:29:32 Uhr
Goto Top
habe es nun raus, so geht es: