ubuntuusers.de

kdialog Ausgabe in Variable schreiben bei #!/bin/bash

Status: Gelöst | Ubuntu-Version: Kubuntu 7.04 (Feisty Fawn)
Antworten |

johnyff

Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

Wenn ich am Anfang eines Scriptes folgendes schreibe

#!/bin/sh
VAR=`kdialog --inputbox Text:'


so wird die Ausgabe in die Variable $VAR geschrieben, aber bei

#!/bin/bash
VAR=`kdialog --inputbox Text:'

bleibt das Script hängen, ich habe das jetzt so gelöst

#!/bin/bash
kdialog  --getsavefilename "/media/l-lager/doks/ScanImages"  "*.jpeg *.jpg |JPG Bilder" >/tmp/datei.tmp
for i in `cat /tmp/datei.tmp`; do
	declare Datei=$i
done

geht das nicht eleganter wie bei #!/bin/bash

P.S. ich muss #!/bin/bash verwenden weil die anderen Befehle im Script sonst nicht funktionieren

LightHammer

Avatar von LightHammer

Anmeldungsdatum:
1. Mai 2007

Beiträge: 96

Wohnort: Brilon

Denke nicht, denn /bin/bash liefert einige möglichkeiten mehr als /bin/sh

/bin/sh nützt sowiso nur größtenteils um die scripte auch unter anderen UNIX systemen laufen zu lassen

johnyff

(Themenstarter)
Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

THX

sorry, habe mich verschrieben, ich meinte

geht das nicht eleganter wie bei #!/bin/sh

P.S. ich muss #!/bin/bash verwenden weil die anderen Befehle im Script sonst nicht funktionieren

also wie kann ich bei bash ein Befehlsausgabe in eine Variable umleiten?

P.S. mir fällt auf das man Shellfragen die schnellsten Antworten bekommt, das lässt vermuten das hier ein paar Shellgurus nur darauf warten

LightHammer

Avatar von LightHammer

Anmeldungsdatum:
1. Mai 2007

Beiträge: 96

Wohnort: Brilon

LINUXUSER (ob ubuntu ob andere) = Zwangsweise Shellguru\^^

sry muss ich zz auch nachdenken meld mich aber wenn ichs habe

Der_Gestreifte

Avatar von Der_Gestreifte

Anmeldungsdatum:
21. Juni 2007

Beiträge: 1261

Wohnort: Nürnberg

johnyff hat geschrieben:

#!/bin/bash
VAR=`kdialog --inputbox Text:'

bleibt das Script hängen, ich habe das jetzt so gelöst

Bleibt es vielleicht hängen, weil Du hinter "Text:" ein normales Hochkomma statt eines Backticks verwendest?
Kommandosubstitution mit VAR=befehl kann die Bash mit Sicherheit - alternativ kannst Du VAR=$(befehl) nehmen.

johnyff

(Themenstarter)
Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

Bleibt es vielleicht hängen, weil Du hinter "Text:" ein normales Hochkomma statt eines Backticks verwendest?

ne, sind schon Backticks

alternativ kannst Du VAR=$(befehl) nehmen.

geht auch nicht, bleibt auch hängen

hier mal der ganze Script

#!/bin/bash

kdialog  --separate-output --checklist  "Scanmodus wählen:" Gray Grau off Color Farbe off Lineart Textmodus on 100 100 off 150 150 off 200 200 off 300 300 on 400 400 off 500 500 off 600 600 off 800 800 off 1200 1200 off > /tmp/liste.tmp

IFS="
"
COUNT=1
for i in `cat /tmp/liste.tmp`; do 
    declare VAR${COUNT}=$i
    COUNT=$((++COUNT))
done 

TMPFILE=$1 
scanimage --format pnm --mode $VAR1 --resolution $VAR2 --brightness -3 -l 0 -t 0 -x 215mm -y 280mm > ${TMPFILE}.pnm  #

Datei=`kdialog  --getsavefilename "/media/l-lager/doks/ScanImages"  "*.jpeg *.jpg |JPG Bilder"`

#kdialog --msgbox $datei
pnmtojpeg -quality 85 -optimize -comment "Created with scanbuttond and pnmtojpeg." $TMPFILE.pnm > $Datei #// die temporäre Datei wird mittels pnmtojpeg in eine jpeg-Datei umgewandelt und dabei komprimiert

rm -f $TMPFILE.pnm 

es wird von ein anderem Script aufgerufen

#!/bin/bash
SCRIPTS='/media/office/tools/grafik/scripte'
TMPDIR="/media/l-lager/doks/ScanImages"                              #//hier wird ein Verzeichnis für die Datei festgelegt, durch die Verwendung der Umgebungsvariable $HOME wird jedes mal der Desktop des aktuellen Benutzers verwendet
TMPFILE="$TMPDIR/scan`date +%Y%m%d`-`date +%H%M%S`" #//wir generieren uns hier den Dateinamen für das spätere Ergebnis, der Name besteht aus dem Präfix scan und wird jedesmal um Datum und Uhrzeit ergänzt,
                                                    #//Dateinamenerweiterungen werden später hinzugefügt
LOCKFILE="/tmp/copy.lock"                           #//Variable für das Lockfile, das kennzeichnet ob der Scanner schon in Benutzung ist, wird hier nicht verwendet

case $1 in
        1)      echo "Button 1 pressed"                       # //wird Button 1 gedrückt so wird eine Meldung ausgegeben(nur sichtbar wenn scanbuttond im Vordergrund läuft, zum debuggen)
             	/$SCRIPTS/scan.sh $TMPFILE $DEVICE    #//und das Skript scan.sh im versteckten Ordner .scanscripts im Homeverzeichnis gestartet, zusätzlich werden noch Name und Ort des Tempfiles,
                ;;                                             #//sowie die Adresse des Scanners übergeben, sinnvoll bei mehr als einem Scanner

        2)      echo "Button 2 pressed"                        #//wird Button 2 gedrückt so wird eine Meldung ausgegeben (siehe oben)
                /$SCRIPTS/scan-copy.sh $TMPFILE $DEVICE    #//und das Skript copy.sh im versteckten Ordner .scanscripts im Homeverzeichnis gestartet, zu übergebenen Attributen siehe oben
                ;;
        3)      echo "Button 3 pressed"                       # //wird Button 3 gedrückt so wird eine Meldung ausgegeben (siehe oben)
               /$SCRIPTS/scan-mail.sh $TMPFILE $DEVICE    #//und das Skript mail.sh im versteckten Ordner .scanscripts im Homeverzeichnis gestartet, zu übergebenen Attributen siehe oben
                ;;
esac

P.S.merke gerade, wenn ich den Script direkt aufrufe geht es

Antworten |