Linux & Co.

cli.help – Update: Bash Builtins Teil 2/5

Und wieder neue Tools für unsere Linux-Hilfe, inklusive (assoziativen) Arrays und Special zum Dir-Stack-Kram ;)

Unser Projekt cli.help bringt Euch Hilfe zur Arbeit auf der Kommandozeile direkt im Terminal. Über 100 Befehle findet Ihr schon dokumentiert, derzeit kommen die Bash-internen Kommandos hinzu. Und da das über 50 Tools sind, Stück für Stück. Highlights in diesem Part: Der Dir-Stack und ein Beispiele für das Aufsetzen, Ändern und Auslesen von assoziativen Arrays.

Bash Builtins

Tools kommen nach alphabetischer Reihenfolge hinzu, allerdings mit Ausnahmen, wenn Tools direkt zusammengehören. Hier sind das zum Beispiel die Tools dirs, pushd und popd, die gemeinsam für den Directory Stack zuständig sind. Das ist eine Liste aktuell besuchter Ordner, durch die Ihr zum Beispiel ganz einfach hin und her navigieren könnt. Da die einzelnen Tools wenig Sinn ergeben, findet Ihr Beispiele für das Zusammenspiel auf der Seite dirstack. Wie Ihr indexierte oder assoziative Arrays nutzen könnt, erfahrt Ihr in declare und dem identischen array (das ist nur als Erinnerungsstütze gedacht – wer etwas über Arrays wissen will, weiß vielleicht nicht, dass declare dafür verantwortlich ist). Alle drei findet Ihr auf die übliche Weise:

curl cli.help/dirstack
curl cli.help/declare
curl cli.help/array

Und genauso erreicht Ihr ab sofort folgende neue Seiten:

  • array
  • continue
  • declare
  • dirs
  • dirstack
  • disown
  • echo
  • enable
  • eval
  • exec
  • exit
  • export
  • popd
  • pushd

Weitere Infos zu cli.help findet Ihr bei GitHub und natürlich über:

curl cli.help/hilfe

Inhalte

Und wie immer, hier noch die lieblos übernommenen Inhalte des Updates – cli.help gehört halt in den Terminal ;)

continue

Zum Anfang einer While-Schleife springen:

while true; do echo Hallo Welt; continue; done

Zum Anfang der ersten von zwei Schleifen springen:

while true; do echo eins; while true; do echo zwei; continue 2; done; done

declare

Variable meine_var anlegen und mit dem Wert 11 belegen – identische Varianten:

declare meine_var=11
declare meine_var="11"
declare -- meine_var=11
meine_var=11

Variable mit Nur-Lesen-Attribut anlegen:

declare -r meine_var="Hallo Welt"

Variable als Integer (-i) deklarieren und Berechnung durchführen (Ausgabe wird 4, ohne -i wäre es der String „2+2“):

declare -i meine_var="2+2"

Integer-Deklaration aus obigem Beispiel entfernen:

declare +i meine_var

Assoziatives Array cities mit Großstädten als Schlüsseln und Ländern als Werten anlegen; anschließend das Land, das zur Stadt Berlin gehört ausgeben:

declare -A cities ( [berlin]=brd [hamburg]=brd [paris]=fra )
echo ${cities[berlin]}

Obiges Array: Alle Schlüssel ausgeben, alle Werte ausgeben, ganzes Array ausgeben, in der Form „berlin : brd“:

for i in "${!cities[@]}"; do echo $i; done
for i in "${cities[@]}"; do echo $i; done
for i in "${!cities[@]}"; do echo $i : ${cities[$i]}; done

Schlüssel berlin aus obigem Beispiel löschen:

unset cities[berlin]

Indexiertes Array mit Wochentagen anlegen, dann Arbeitstage ausgeben:

declare tage=( [1]=Montag [2]=Dienstag [3]=Mittwoch [4]=Donnerstag [5]=Freitag [6]=Samstag [7]=Sonntag )
for i in {1..5}; do echo ${tage[$i]}; done

dirstack

Beispiel 1 – Stapelauf- und -abbau:
pushd: Verzeichnis dem Verzeichnisstapel hinzufügen und ins Verzeichnis wechseln.
popd: Top-Verzeichnis (aktuelles) vom Stapel entfernen und ein Verzeichnis zurück
springen – bis wieder im Home-Verzeichnis (~) mit leerem Stapel:

mkdir ~/1 ~/2 ~/3 ~/4
pushd 1 --> Ins Verzeichnis 1.
pushd ../2 --> Ins Verzeichnis 2.
pushd ../3 --> Ins Verzeichnis 3.
pushd ../4 --> Verzeichnis 4 jetzt Top-Verzeichnis, Stapel besteht aus 1, 2, 3, 4.
popd --> Zurück in 3
popd --> Zurück in 2
popd --> Zurück in 1
popd --> Zurück in ~ und Stapel ist leer.

dirs: Verzeichnisstapel samt Verzeichnisnummern (-v) anzeigen:

dirs -v

Beispiel 2 – Short-cuts:
Verzeichnisstapel mit 1, 2, 3, 4 so anlegen, dass man später mit „cd ~1“, „cd ~2“ etc. zwischen den Verzeichnissen wechseln kann:

mkdir ~/1 ~/2 ~/3 ~/4
pushd 4 --> Ins Verzeichnis 4.
pushd ../3 --> Ins Verzeichnis 3.
pushd ../2 --> Ins Verzeichnis 2.
pushd ../1 --> Ins Verzeichnis 1.
pushd . --> Nochmal Verzeichnis 1, damit es im Stapel Nummer 1 (und 0) ist (sonst wäre es nur 0).
dirs -v
Ausgabe:
0  ~/stapel/1
1  ~/stapel/1
2  ~/stapel/2
3  ~/stapel/3
4  ~/stapel/4
5  ~/stapel
cd ~1 --> Ins Verzeichnis 1.
cd ~3 --> Ins Verzeichnis 3.
cd ~5 --> Ins Verzeichnis ~.

disown

Job/Programm xeyes von der Shell trennen, aus der es gestartet wurde:

disown xeyes

Alle (a) laufenden (r) Jobs von der aktuellen Shell trennen:

disown -ar

echo

Hallo und Welt in je einer Zeile ausgeben:

echo -e "Hallo\nWelt"

Hallo und Welt durch TAB getrennt ausgeben:

echo -e "Hallo\tWelt"

enable

Bash-interne Kommandos samt Status auflisten:

enable -a

Das Bash-interne Kommando wait deaktivieren (zum Beispiel, um ein eigenes Programm ~/meine-tools/mehr-ordner/wait einfach via wait nutzen zu können):

enable -n wait

wait wieder aktivieren:

enable  wait

eval

Argumente als Shell-Kommando ausführen – hier: echo „Hallo Welt“ schreiben lassen:

eval echo Hallo Welt

Variable a mit einer Pipe belegen und diese dann ausführen:

a="fortune | cowsay"
eval $a

Den Befehl „echo Hallo Welt“ aus drei Bausteinen zusammensetzen und ausführen:

befehl=echo; wort1=Hallo; wort2=Welt; eval $befehl $wort1 $wort2

exec

Alle Ausgaben im Terminal in eine Datei umleiten:

exec > meinlog.txt

Alle Fehlerausgaben in eine Datei umleiten:

exec 2> fehlerlog.txt

xeyes-Prozess starten und aktuellen Bash-Prozess komplett ersetzen:

exec xeyes

export

Alle aus der aktuellen Shell in Sub-Shells exportiert werdende Variablen und Funktionen ausgeben:

export -p

Variable/Funktion a in Sub-Shells zur Verfügung stellen:

export a

Beispiel: Variable a definieren, exportieren und in Sub-Shell ausgeben:

a="Hallo Welt"
export a
bash
echo $a

Beispiel: Funktion fow definieren, exportieren und in Sub-Shell nutzen:

fow () { fortune | cowsay; }
export fow
bash
fow

Gelüstet es nach mehr CLI?

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Du hier mehr über Open Source, Linux, Bastelkram oder auch Windows-Basics lesen und Tutonaut unterstützen möchtest: Spendier mir einen Kaffee via Paypal. Schon mal im Voraus: Danke! Nicht verpassen: cli.help

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Do NOT follow this link or you will be banned from the site!
Close
Close