Shell Script Variable Gültigkeit

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    ich bräuchte da doch ein wenig Nachhilfe.
    Habe ein Shell Script, welches auf eine mysqldb zugreift
    Da ich den Select auf id=1 beschränke, bekomme ich auch nur eine Zeile zurück.
    Mit dem Befehl
    echo $mytmwin > /srv/tmwin
    schreibe ich den Wert in die Datei tmwin - das klappt auch, aber
    nach dem done ist die Variable leer

    Ist das normal? Gelten Variablen nur innerhalb einer Schleife?

    Code
    # Datenbank Test
    mysql --skip-column-names --silent -uroot -p"xxxxx" -D neu -e "SELECT tmwin FROM extra WHERE id = 1" |
    while read line; do
        mytmwin=$(echo $line | awk {'print $1'})
        echo $mytmwin > /srv/tmwin
    done
    
    
    echo $mytmwin
  • Das hat nichts damit zu tun, dass der Scope der Variablen auf die Schleife begrenzt wäre,
    sondern damit, dass durch das Piping des MySQL Dumps in das while Konstrukt eine neue Subshell gestartet wird,
    in der die Variable durch Zuweisung definiert wird.
    Im Statement, wo Du die Variable nach der Schleife referenzierst, ist die Subshell mit ihren Variablen bereits Vergangenheit.

    Du könntest aber einen Scope für benötigte Variablen definieren,
    indem Du geschweifte Klammern um die while loop legst,
    so dass die öffnende unmittelbar hinter dem Pipe und voe dem while Statement steht
    und die schliessende erst nach dem Statement, wo Du den Inhalt der Variablen ausliest.

    Oder Du lagerst das in eine Funktion aus.

    Oder Du speicherst den MySQL Dump in einer Variablen (z.B. Array) zwischen, über den Du danach in einer Loop iterierst.
    Das kann aber, je nachdem wie gross der Dump ist, sehr ineffizient sein.

    Einmal editiert, zuletzt von Life_of_Pi (22. März 2014 um 18:11)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!