Anzeige

[BASH]

#1

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
Code:
benutzername=passwort
test=test
hallo=hier
Code:
#!/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
}
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
#2
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:
Bash:
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ß
 
Anzeige

Neue Beiträge

Anzeige