cli.help – Update: Bash Builtins Teil 5/5
Die letzten Bash-internen Tools - mit Nervkram und nervendem Kram.
Nach über 50 Tools ist endlich Schluss mit den Bash Builtins, puhhh. Wirkliche Highlights finden sich in den letzten zehn Werkzeugen nicht, aber zumindest zwei Dinge werden im Gedächntnis bleiben - eines war einfach nur nervig und ein anderes lässt sich wunderbar für Schabernack einsetzen. Und für STRG+C-Freunde gibt es auch noch eine Star-Wars-Referenz: "It's a trap!". Aber mal von vorne ...
Bash Builtins bei cli.help
Zur Erinnerung nochmal ganz kurz: cli.help ist unsere hauseigene Linux-Hilfe für den Terminal im Terminal. Mit den Bash Internals sind es nun insgesamt 145 Hilfeseiten. Via curl könnt Ihr jederzeit Hilfe zu typischen Linux-Tool abrufen:
curl cli.help/hilfe
curl cli.help/printf
curl cli.help/chmod
Und so weiter. Weitere Infos findet Ihr auf unserer GitHub-Seite.
Bei den Bash Builtins handelt es sich um Bash-interne Werkzeuge - in diesem letzten Part dazu um folgende:
test times trap type typeset ulimit umask unalias unset wait
Und hier natürlich auch wieder:
curl cli.help/test
curl cli.help/umask
Und Bonuspunkte für den Nervfaktor bekommen: times und ulimit. times "Gibt den kumulierte Nutzer- und Sysemzeitverbrauch der Shell und aller von ihr gestarteten Prozesse aus.", wie die Hilfe mitzuteilen weiß. Aber wie genau lässt es sich einsetzen? Wie lassen sich die ausgegebenen Zeiten beeinflussen? Eigentlich soll cli.help genau solche Fragen beantworten, bei times müssen wir passen :( Warum? Nun, versucht mal nach "times" zu suchen - fast ein Ding der Unmöglichkeit ... Es gibt es deutlich verbreitetere Tool "time", in so ziemlich jedem Artikel steht irgendwo sowas wie "multiple times" und das gesuchte times scheint auch kaum jemand irgendwo zu nutzen. Und noch dazu verhält es sich hier unter Linux und Windows (git-bash) anders ... Es nervt.
Wenn Ihr mal selbst nerven wollt, jubelt jemandem folgenden Befehl unter:
ulimit -v 1
Das setzt den virtuellen Speicher der aktuellen Shell auf ein Maximum von 1 - was genau das macht, müsst Ihr schon selbst probieren ;) Es geht auch nichts kaputt, versprochen. Und dann versucht es mal mit höheren Werten - der Grundeffekt wird bleiben, die Details aber werden sich ändern. Wirklich nützlich ist ulimit sicherlich nur in sehr sehr speziellen Szenarien, aber lohnt sich schon, es zu kennen.
Inhalte
Und wie bei allen cli.help-Updates kommt jetzt, was gar nicht kommen soll: Der Inhalt aus den neuen Hilfedateien im Browser, wo er nicht hingehört. cli.help-Inhalt gehört in den Terminal. But dennoch ...
test
Testen, ob Datei foobar existiert:
test -e foobar
Testen, ob Datei foobar nicht existiert:
test ! -e foobar
Testen, ob Datei foo älter ist als Datei bar:
test foo -ot bar
Testen, ob String/Variable meinevar nicht leer:
test -n "$meinevar"
Testen, ob Variable meinevar ungleich hallo ist:
test "$meinevar" != "hallo"
Testen, ob Integer/Zahl größer oder gleich 5 ist:
test $a -gt 5
Testen, ob Zahl a größer 5 UND String b existent ist:
test $a -gt 5 && test -n "$b"
Testen, ob Zahl a größer 5 ODER String b existent ist:
test $a -gt 5 || test -n "$b"
Verwendung als If-Then-Else-Statement:
test $a -gt 5 && echo Ja || echo Nein
Wie oben, aber in symbolischer Schreibweise mit []:
if [ $a -gt 5]; then echo Ja, else echo Nein; fi
times
Zeitverbrauch anzeigen:
times
HILFE benötigt! Das Kommando verhält sich häufig komisch bis falsch, zudem lassen sich nirgends Infos über den (sinnvollen) Gebrauch finden - und nach so einem Wort zu googlen ist zum Kotzen ...
Wenn jemand Infos zu dem Mistding hat, bitte her damit - Danke!
trap
In Skripten: Beenden per STRG+C (SIGINT) und per kill-Kommando ohne Signalangabe (SIGTERM) verhindern und stattdessen Warnung ausgeben:
trap "echo Nein, nein, nein, böser User." SIGINT SIGTERM
type
Alle "Orte" des Programms echo zeigen, inklusive Aliassen, Builtins und Funktionen:
type -a echo
Nur den Pfad der echo-Binärdatei ausgeben:
type -P echo
Nur Typ (alias, keyword, function, builtin, file) dessen was ausgeführt wird anzeigen:
type -t echo
typeset
Synonym für declare, daher:
curl cli.help/declare
ulimit
Alle Ressourcenlimits aufführen, die zur Verfügung stehen:
ulimit -a
Virtuellen Speicher der aktuellen Shell limitieren und dem User den ganzen Tag versauen:
ulimit -v 1
umask
Ordner per mkdir nicht mit Standardrechten 755 (umask -> 022), sondern mit 777 (umask -> 000) erstellen:
umask 000
Rechte für Dateierstellung von 777 auf 333 setzen (7 minus 4):
umask 444
unalias
Alias für ls in aktueller Shell entfernen:
unalias ls
Alle Aliasse entfernen:
unalias -a
unset
Funktion test auflösen/entfernen:
unset -f test
Variable test auflösen/entfernen:
unset -v test
Variable test auflösen falls existent - sonst die Funktion test:
unset test
wait
Warten, bis Job Nr. 2 fertig ist, dann echo ausführen:
wait %2; echo "Das Ende"
Skriptchen: 1. "Anfang" ausgeben. 2. ping ausführen und dessen Job-Nummer in $pid speichern. 3. Warten bis Job Nr. $pid beendet ist. 4. "Ende" ausgeben.
echo Anfang
ping tutonaut.de & pid=$!
wait $pid
echo Ende
Nach Ping-Befehl "Ende" ausgeben - egal, ob ping erfolgreich war oder nicht:
ping tutonaut.de & pid=$!; wait $pid; echo Ende
Wie oben, aber nur bei Erfolg Ende ausgeben:
ping tutonaut.de && echo Ende
Weitere Artikel rund um Linux - auch mit Grafik ;) - findet Ihr hier.