HomeSoftwareSpieleMusikForum

Variablen editieren

Im Gegensatz z.B. zur zsh existiert bei bash und ksh kein internes Kommando zum interaktiven Editieren von Shellvariablen. Um einen Variablenwert zu ändern, muss man hier eine komplette Zuweisung name=wert ausführen, was bei längeren Werten umständlich ist und leicht zu Fehlern führen kann. Die nachfolgend beschriebene Funktion vared ermöglicht das einfache Ändern von Variablenwerten mittels eines externen Editors. Das Verfahren ist simpel: Die aktuellen Variablenwerte werden in Form von Zuweisungen in eine temporäre Datei geschrieben, dann wird ein Editor mit dieser Datei gestartet. Der Benutzer kann nun die Zuweisungen ändern (muss allerdings darauf achten, das die Shell-Syntax erhalten bleibt). Danach wird die Datei in der aktuellen Shell ausgeführt, um die Änderungen wirksam werden zu lassen, und am Ende wieder gelöscht. Auf diese Weise lassen sich in einem Arbeitsgang beliebig viele Variablen ändern, auch Arrayelemente und komplette Arrays. Natürlich gelten die Änderungen nur bis zum Ende der laufenden Shell; sollen sie dauerhaft erhalten bleiben, müssen sie in einer permanenten (z.B. profile-) Datei untergebracht werden.

Aufgerufen wird der Editor, mit dessen Pfad die Variable EDITOR besetzt ist, sonst vi.

Außer für Shellvariablen ist vared auch zum Bearbeiten von Funktionen geeignet. Man kann damit zu Testzwecken schnell eine Shellfunktion erzeugen und verändern, ohne selber eine Datei anlegen, ausführen und ggf. wieder löschen zu müssen. Man kann eine existierende Funktion modifizieren, ohne die ursprüngliche Quelldatei zu verändern, oder eine Quelldatei unter Angabe des Funktionsnamens direkt editieren. In jedem Fall ist die geänderte Funktion unmittelbar nach dem Schließen des Editors aktiv. Näheres dazu auf der nächsten Seite.

Wegen starker Differenzen zwischen den Shells, insbesondere bei den Funktionen, gibt es getrennte vared-Versionen für bash und ksh.

Der Aufruf erfolgt in der Form

vared -h
vared {varname|[-a]arrayname|arrayname[index]|{-f|-F|-p} funcname}...

vared -h gibt eine kurze Hilfe aus.

Arrays: Die Option -a betrifft nur indizierte Arrays. Sie bewirkt, dass das nachfolgende Array auf jeden Fall in der indexbasierten Form ausgegeben wird, z.B.

typeset -a array=([0]='x' [1]='y' [2]='z')
Ohne -a hängt die Ausgabe davon ab, ob in dem Array alle Indizes lückenlos vorhanden sind. Wenn ja, wird es in der einfachen sequentiellen Form dargestellt, z.B.
typeset -a array=( 'x' 'y' 'z' )
sonst ebenfalls in der indexbasierten Form. Assoziative Arrays (Kornshell) werden immer indexbasiert ausgegeben.
up
Created 2011-08-11 by mopcoge