
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?