# [BASH]



## Alex Duschek (6. Mai 2010)

Ich hab hier ein sicher banales Problem, ich fliege immer per exit 4 aus dem Programm, $ERROR bekommt nie den Wert 0. Hat jemand eine Idee, an was das liegen könnte?

Beispielinhalt der .data

```
benutzername=passwort
test=test
hallo=hier
```


```
#!/bin/bash -x

extractPasswd()
{
        THENAME=$1
	ZERO=0
	ERROR=1
	# read corresponding password
	FILE=~/.data
	if [ -s $FILE ]; then
		cat $FILE | while read LINE; do
			USR=${LINE%=*}				# extracts the username
			PW=${LINE#*=}				# extracts the password

			# correct user found, exit
			if [ "$THENAME" == "$USR" ]; then
				ERROR=0
				break;
			fi
		done
	fi

	# check for errors
	if [ $ERROR -ne $ZERO ]; then
		exit 4;
	fi
}
```


----------



## deepthroat (6. Mai 2010)

Hi.

Dadurch, das du das while in einer Pipe verwendest wird das in einer Subshell ausgeführt. Änderungen an Variablen in der Subshell wirken sich nicht auf Variablen der "Ober"-Shell aus.

Man sollte sowieso versuchen sowenig externe Programme wie möglich aufzurufen. In dem Fall kann man einfach eine Umleitung verwenden:

```
while read LINE; do 
   ...
done < $FILE
```
Du könntest dir auch diese ERROR Variable sparen und einfach return 0 in der Schleife aufrufen und nach der Schleife return 1 (\edit: bzw. exit 4)

Gruß


----------



## Alex Duschek (6. Mai 2010)

Jup, daran lags, danke!

PS: Irgendwer muss meinen Thementitel gestohlen haben


----------

