peschmae hat geschrieben:Das Problem ist, dass wenn du Pipes verwendest für die while-Schleife ein separater Kindprozess erstellt wird.
Da Variablen die du im Kindprozess änderst im Parent-Prozess nicht geändert werden gehen entsprechende Variablen verloren.
Umgehen kannst du das z.B. indem du statt "ls | while read line" sowas machst wie "for f in $(ls); do"
eventuell vorher noch
setzen oder so.
Danke. Dieser Fall funktioniert.
Aber in einer Mehrzeiligen Dialogabfrage
Code: Alles auswählen
#!/bin/bash
: ${DIALOG=dialog}
exec 3>&1
value=`$DIALOG --ok-label "Submit" \
--backtitle "$backtitle" \
--form "Test" \
20 50 0 \
"Wert1:" 1 1 "$wert1" 1 25 10 10 \
"Wert2:" 2 1 "$wert2" 2 25 10 10 \
"Wert3:" 3 1 "$wert2" 3 25 10 10 \
2>&1 1>&3`
IFS="
"
col=0
for val in `echo $value`
do
col=$(expr $col + 1)
case $col in
1) wert1="$val" ;;
2) wert2="$val" ;;
3) wert3="$val" ;;
esac
done
echo "1: $wert1"
echo "2: $wert2"
echo "3: $wert3"
col=0
echo "$value" | while read line
do
col=$(expr $col + 1)
echo "Wert$col - $line"
done
mit dieser Eingabe
Code: Alles auswählen
│ │Wert1: Value1 │ │
│ │Wert2: Val2 TEST │ │
│ │Wert3: Test │ │
ergibt sowas fehlerhaftes
Code: Alles auswählen
1: Value1 Val2 TEST Test
2:
3:
Wert1 - Value1
Wert2 - Val2 TEST
Wert3 - Test
Die While Methode kommt damit ohne Probleme klar. Doch IF, trotz einiger Versuche mit dem IFS-Parameter, scheitert jedesmal
Man kann doch mit While auch so arbeiten:
So gibt es vermutlich keine Pipe.
Kann man "< datei" irgendwie auch mit einer Variable füllen ?
Wie bereits erwähnt, ich möchte auf keinen Fall Dateien schreiben müssen.
Die BASH dafür doch irgendwas haben, nur die Manual ist einfach zu groß um da wirklich mal was zu finden
Gruß