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" \
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" \
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" \
set strCounter = `tail -l /tmp/counter`
rm -f /tmp/counter
echo "####"$strCounter"####"
[/code]
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
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
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
rm -f /tmp/counter
echo "####"$strCounter"####"
[/code]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 91040
Url: https://administrator.de/contentid/91040
Ausgedruckt am: 05.11.2024 um 06:11 Uhr
5 Kommentare
Neuester Kommentar
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?
Was mißglückt Dir beim Testen der Variablen auf Inhalt? Auf welchen Inhalt? Was genau gibt zenity zurück?
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?
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:
b) Standardlösung: Abbruch der Eingabemaske bricht die gesamte Programmausführung ab (oder bei entsprechender Vorbreitung die jeweilige Subshell)*:
*) 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.
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.